批处理:根据第一部分文件名创建文件夹;将文件复制到该文件夹​​中

时间:2014-12-04 18:31:59

标签: file batch-file copy directory

我有一个包含数百万张小图片的文件夹。我想将第一个12.288文件放在一个文件夹中,然后将另一个12.288文件放在另一个文件夹中,依此类推......总是根据文件名的第一部分。这些文件的名称如下:

GRID_00000_01

GRID_00000_02

,直到

GRID_00000_12288

然后是下一组文件:

GRID_00001_01

,直到

GRID_00001_12288

这一直持续到GRID_12288_12288

我希望批处理为所有以该文件名开头的文件创建一个文件夹GRID_00000,然后将所有文件放入其中。然后它必须对下一组文件执行相同操作,依此类推。我不知道自己是否清楚,因为我对编程知之甚少。

我的系统是Windows 8.1

调用source-directory:

D:\photoshop\test\grid_04\droplet\Bilder

调用目标目录:

D:\photoshop\test\grid_04\droplet\geordnet

我在互联网上找到了这个:

    @echo off

    for /f %%a in ('dir /a-d /b') do (
      if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
    )

    goto :EOF

    :func
    set file=%~1
    set dir=%file:~0,10%
    md "T%dir%" 2>nul

move "%file%" "T%dir%" 
goto :EOF

它没有指定目标目录。但实际上它并不是必需的。如果在原始文件夹中创建文件夹,那也很好。

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"

FOR /f "tokens=1,2,*delims=_" %%a IN ('dir /b /a-d "%sourcedir%\grid_*_*" ') DO (
 ECHO(MD "%destdir%\%%a_%%b" 2>nul
 ECHO(MOVE "%sourcedir%\%%a_%%b_%%c" "%destdir%\%%a_%%b\%%a_%%b_%%c"
)

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

所需的MD命令仅用于ECHO用于测试目的。 在您确认命令正确无法后,将ECHO(MD更改为MD以实际创建目录。 2>nul会抑制错误消息(例如,当目录已存在时)

为了测试目的,所需的MOVE命令仅为ECHO在您确认命令正确后,将ECHO(MOVE更改为MOVE以实际移动文件。附加>nul以取消报告消息(例如1 file moved