我使用的是Windows 7,我将50万张图片存储在一个文件夹中,而C:\ capture"。这些图像形成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
所以我基本上只对第一个'之前的所有事情感兴趣。在名字中。如何编写创建子文件夹并将相应文件移入其中的批处理文件?
答案 0 :(得分:4)
要从要处理的目录中的命令行执行(如果您尝试使用副本,则更好)
for /l %a in (1 1 330) do (md %a 2>nul & if exist %a\ move /y "%a.*.png" %a\ )
如果要在批处理文件中使用它,需要转义百分号,将所有%a
替换为%%a
for /l %%a in (1 1 330) do (
md %%a 2>nul
if exist %%a\ move /y "%%a.*.png" %%a\
)
它将生成所有前缀,并为每个前缀执行移动命令将匹配文件移动到最终文件夹(先前创建)
答案 1 :(得分:3)
这是一个更通用的批处理脚本,即边界不可知,从某种意义上说它将根据"前缀"自动决定必须创建多少个子文件夹。这些图像,如果图像序列的数量发生变化,你就不必修改它。
@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
答案 2 :(得分:0)
从sokins的答案中获取灵感,我将为这种努力付出代价...
@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!
)
)