首页 > 解决方案 > 批量移动文件到文件夹。文件夹根据文件名命名

问题描述

试图找到可以做到这一点的蝙蝠,但没有运气。由于我对批处理编码的了解非常有限,我不知道从哪里开始编辑类似的现有代码。

我在一个文件夹中有文件,如下所示:

    \\NAS\ART\1234.pdf
    \\NAS\ART\1235.ai
    \\NAS\ART\1236.eps

我想将这些文件移动到服务器上的另一个文件夹,其中文件夹结构如下:

\\NAS\Art\1234\Original\1234.pdf
\\NAS\Art\1235\Original\1235.ai
\\NAS\Art\1236\Original\1236.eps

它会将文件放入文件名文件夹的原始文件夹中。对不起,如果这令人困惑。

我发现这与我想要的很接近,但减去了字符的删除。

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (
 'dir /b /a-d "%sourcedir%\*.xml" '
 ) DO (
 FOR /f "tokens=1delims=_-" %%b IN ("%%a") DO (
  FOR /f "delims=" %%d IN (
  'dir /b /ad "%destdir%\*%%b*" '
  ) DO (
   ECHO(MOVE "%%a" "%destdir%\%%d\"
  )
 )
)

GOTO :EOF

标签: batch-filebatch-processing

解决方案


您可以使用此批处理文件将所有非隐藏文件移动\\NAS\ART\到之前创建的合适子目录中(如果不存在),并覆盖目标目录中具有相同名称的文件。

@echo off
for %%I in ("\\NAS\ART\*") do (
    if not "%%I" == "%~f0" (
        md "%%~dpnI\Original" 2>nul
        move /Y "%%I" "%%~dpnI\Original\"
    )
)

IF条件避免将批处理文件也存储在目录\\NAS\ART\中,如果肯定不是这种情况,可以将其删除。

要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • if /?
  • md /?
  • move /?

另请阅读有关使用命令重定向运算符的Microsoft 文章,了解2>nul用于抑制命令MD输出的错误消息以处理目录上的STDERR以通过将此错误消息重定向到设备NUL来创建已经存在的说明。


推荐阅读