我想创建一个批处理脚本,根据文件ID将我的文件移动到它们各自的文件夹中。
示例:
文件名E:\ folderPath \ Pre001Post.csv,将移至文件夹E:\ folderPath \ M001 \
001是ID,“ Pre”和“ Post”是随机的,2个零表示小于10的数字。
文件名E:\ folderPath \ Pre099Post.csv,将移至文件夹E:\ folderPath \ M099 \
099是ID,“ Pre”和“ Post”是随机的,1个零表示小于100的数字。
文件名E:\ folderPath \ Pre109Post.csv,将移至文件夹E:\ folderPath \ M109 \
109是ID,“ Pre”和“ Post”是随机的。
下面是我的脚本,
@setlocal enabledelayedexpansion
for /l %%S in (1, 1, 111) do (
IF %%S LSS 10 ( SET z=00%%S ) ELSE (goto:moveFileProcess)
IF %%S LSS 100 ( SET z=0%%S ) ELSE (goto:moveFileProcess)
:moveFileProcess
echo !z!
echo %z%
MOVE /Y E:\folderPath\???%z%????.csv E:\folderPath\M%z%\
)
问题是我无法将变量%% s的值设置为变量z(以00开头)。
我一直遵循Windows Batch files: what is variable expansion, and what does EnableDelayedExpansion mean?添加@setlocal enabledelayedexpansion,但是它仍然失败。有人知道我错了什么吗?
答案 0 :(得分:3)
对不起,循环中不允许使用任何标签,也不允许使用goto
(除非在特定条件下跳出循环)。
我稍微重写了您的脚本。您忘记了在z
命令中延迟move
的扩展,而我为计数器实现了另一种方式:
@setlocal enabledelayedexpansion
for /l %%S in (1001, 1, 1111) do (
set "z=%%S"
set "z=!z:~-3!"
ECHO MOVE /Y "E:\folderPath\???!z!????.csv" "E:\folderPath\M!z!\"
)
在对故障排除/验证其是否符合您的要求后,删除ECHO
命令。