批处理文件循环
Batch File Loop
我需要跨单个目录中的多个子文件夹迁移一堆文件。每个子文件夹最多包含100个数据文件(0000-0099,0100-0199等),恭敬地命名为dir_001、dir_002等
例如,我可以使用以下方法成功传输 所有 以“F_0”前缀开头的文件:
for /r X:\<PATH1>\ %%F in (F_0*.txt) do copy %%F E:\<PATH2>\
这将从 all 抓取 all 的文件,涵盖从 F_00001.txt 到 F_09999.txt 的所有图像的子文件夹(或任何上限)。但大多数时候我只需要一个较小的子集,例如从 F_04395.txt 到 F04542.txt.
这是我一直在尝试的不的方法
for /r X:\PATH1\ %%F in (F_0*.txt) do (
For %%A in (%%F) do (
Set Folder=%%~dpA
For /L %%i in (4395 1 4542)do if /I exist Folder\F_0%%i.txt copy %%F E:\PATH2\
)
)
这似乎在将文件路径转换为变量时出现问题。
它还需要适用于从 F_000001.txt 到 F_010001.txt 的序列,换句话说,从文件编号 1 到 1001(0-9、10 的前导零数量不同) -99,100-999,1000-9999,所以总是5位数字加上“F_0”)
的前缀
如有任何建议,我们将不胜感激!
更新:
感谢@Gerhard,我已经将代码更改为下面的代码,但仍然无法正常工作,并且 %%dpA 变量与文件名的其余部分存在问题 combining/concatenating。下面代码的结果是文件名和路径之间的双斜杠,或者如果我去掉硬编码冲突,那么代码也会失败。
for /r X:\PATH1\ %%F in (F_0*.txt) do (
For %%A in (%%F) do (
For /L %%i in (4395 1 4542)do if /I exist %%dpA\F_0%%i.txt copy %%F E:\PATH2\
)
)
再次感谢@Gerhard,你在优化方面比我领先,但仍然帮助很大。这是我的最终代码,它也解决了多个子文件夹,并合并为一行!
setlocal EnableDelayedExpansion
for /L %%i in (43,1,45,) do ((SET "formattedValue=000000%%i" & SET PathSource2=X:\Path1\Dir_!formattedValue:~-3!) & (For /L %%i in (4395 ,1,4542) do (if exist "!PathSource2!\F_0%%i.jpg" copy "!PathSource2!\F_0%%i.txt" "E:\Path2\")))
我需要跨单个目录中的多个子文件夹迁移一堆文件。每个子文件夹最多包含100个数据文件(0000-0099,0100-0199等),恭敬地命名为dir_001、dir_002等
例如,我可以使用以下方法成功传输 所有 以“F_0”前缀开头的文件:
for /r X:\<PATH1>\ %%F in (F_0*.txt) do copy %%F E:\<PATH2>\
这将从 all 抓取 all 的文件,涵盖从 F_00001.txt 到 F_09999.txt 的所有图像的子文件夹(或任何上限)。但大多数时候我只需要一个较小的子集,例如从 F_04395.txt 到 F04542.txt.
这是我一直在尝试的不的方法
for /r X:\PATH1\ %%F in (F_0*.txt) do (
For %%A in (%%F) do (
Set Folder=%%~dpA
For /L %%i in (4395 1 4542)do if /I exist Folder\F_0%%i.txt copy %%F E:\PATH2\
)
)
这似乎在将文件路径转换为变量时出现问题。
它还需要适用于从 F_000001.txt 到 F_010001.txt 的序列,换句话说,从文件编号 1 到 1001(0-9、10 的前导零数量不同) -99,100-999,1000-9999,所以总是5位数字加上“F_0”)
的前缀如有任何建议,我们将不胜感激!
更新: 感谢@Gerhard,我已经将代码更改为下面的代码,但仍然无法正常工作,并且 %%dpA 变量与文件名的其余部分存在问题 combining/concatenating。下面代码的结果是文件名和路径之间的双斜杠,或者如果我去掉硬编码冲突,那么代码也会失败。
for /r X:\PATH1\ %%F in (F_0*.txt) do (
For %%A in (%%F) do (
For /L %%i in (4395 1 4542)do if /I exist %%dpA\F_0%%i.txt copy %%F E:\PATH2\
)
)
再次感谢@Gerhard,你在优化方面比我领先,但仍然帮助很大。这是我的最终代码,它也解决了多个子文件夹,并合并为一行!
setlocal EnableDelayedExpansion
for /L %%i in (43,1,45,) do ((SET "formattedValue=000000%%i" & SET PathSource2=X:\Path1\Dir_!formattedValue:~-3!) & (For /L %%i in (4395 ,1,4542) do (if exist "!PathSource2!\F_0%%i.jpg" copy "!PathSource2!\F_0%%i.txt" "E:\Path2\")))