批量根据名称将文件移动到新的子文件夹

我正在使用Windows 7,我有一个文件夹“C:\ capture”中存储了50万的图像。 这些图像形成330个图像序列,并且它们被命名如下:

1.0000000000.png ... 1.0000003299.png ... ... 330.0000000000.png ... 330.0000000010.png 

我想把这些文件移动到名字的第一部分后面的330个子文件夹中。

 C:\capture\1\1.0000000000.png ... C:\capture\1\1.0000003299.png ... ... C:\capture\330\330.0000000000.png ... C:\capture\330\330.0000000010.png 

所以我基本上只对第一个之前的一切感兴趣。 在名字。 如何编写一个创build子文件夹的batch file,并将相应的文件移入其中?

要从待处理目录内的命令行执行(如果您尝试复制,则更好)

 for /l %a in (1 1 330) do (md %a 2>nul & if exist %a\ move /y "%a.*.png" %a\ ) 

如果您想在批处理文件中使用它,百分号需要转义,用%%a替换所有的%a %%a

 for /l %%a in (1 1 330) do ( md %%a 2>nul if exist %%a\ move /y "%%a.*.png" %%a\ ) 

它将生成所有的前缀,并为每个前缀执行移动命令将匹配的文件移动到最终文件夹(以前创建)

这里是一个更通用的批处理脚本,它是边界不可知的 ,因为它会根据图像的“前缀”自动决定创建多少个子文件夹,所以你不必修改它图像序列的数量改变。

 @echo off set DIR="C:\capture" pushd %DIR% setlocal ENABLEDELAYEDEXPANSION for %%g in (*.png) do ( set t=%%~nxg for /F "delims=." %%a in ("!t!") do ( if not exist %%a (md %%a) move !t! %%a > nul ) ) endlocal popd 

从索金斯的回答中获得灵感,我将斟酌这一努力…

 @echo off setlocal enabledelayedexpansion for %%i in (C:\capture\*.png) do ( for /f "tokens=3 delims=.\" %%a in ('echo %%i') do ( set prefix=%%a if not exist C:\capture\!prefix! md C:\capture\!prefix! move "%%i" C:\capture\!prefix! ) )