我有一组文件要复制到一组新的子文件夹。
例如:
0_107_206.tif
1_0_69.tif
1_16_75.tif
1_40_117.tif
2_0_36.tif
2_26_62.tif
35_0_19.tif
这些文件存储在文件夹中,基于文件名的第一个子字符串,如0,1或35.我想根据2'_'字符之间的第二个子字符串创建子文件夹。
我尝试了几件事SETLOCAL ENABLEDELAYEDEXPANSION
FOR %% B in(* .tif)DO(
SET FileName = %% B
SET FileName1 =!FileName:~2!
SET FileName2 =!FileName1:~0,-7!
MD%TargetPath%!FileName2!
)
ENDLOCAL
但这不够灵活。有没有办法获得'_'字符的位置并将其输入SUBSTRING函数?当然,这需要循环工作,因为我需要处理数千个文件 提前谢谢。
答案 0 :(得分:3)
FOR %%B in (*.tif) DO (
for /f "tokens=1,2 delims=_" %%x in ("%%~B") do (
md "%TargetPath%%%~y"
copy %%~B "%TargetPath%%%~y\%%~B"
)
)
答案 1 :(得分:1)
给定文件结构
u:\0\0_107_206.tif
u:\1\1_0_69.tif
u:\1\1_16_75.tif
u:\1\1_40_117.tif
u:\2\2_0_36.tif
u:\2\2_26_62.tif
u:\35\35_0_19.tif
然后这批:
@ECHO OFF
SETLOCAL
SET "sourcedir=u:"
SET "destdir=c:\destdir"
FOR /f "tokens=1*delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\*_*_*.tif" '
) DO FOR /f "tokens=1,2,3delims=_" %%B IN ("%%~na") DO (
ECHO MD "%destdir%\%%C"
ECHO COPY /b "%%a" "%destdir%\%%C\"
)
GOTO :EOF
会生成
MD "c:\destdir\107"
COPY /b "u:\0\0_107_206.tif" "c:\destdir\107\"
MD "c:\destdir\0"
COPY /b "u:\1\1_0_69.tif" "c:\destdir\0\"
MD "c:\destdir\16"
COPY /b "u:\1\1_16_75.tif" "c:\destdir\16\"
MD "c:\destdir\40"
COPY /b "u:\1\1_40_117.tif" "c:\destdir\40\"
MD "c:\destdir\0"
COPY /b "u:\2\2_0_36.tif" "c:\destdir\0\"
MD "c:\destdir\26"
COPY /b "u:\2\2_26_62.tif" "c:\destdir\26\"
MD "c:\destdir\0"
COPY /b "u:\35\35_0_19.tif" "c:\destdir\0\"
所以你只需要改变源和目标目录名称以适应;如果合适,将copy
命令更改为move
;删除要激活的ECHO
个关键字。
您还可以将2>nul
附加到MD
行,以取消“已存在的指令”消息。
或者,您可以将COPY
替换为XCOPY
,然后MD
将变得无关紧要。