for循环中的批处理脚本设置变量失败

时间:2019-06-04 11:14:07

标签: batch-file for-loop

我想创建一个批处理脚本,根据文件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,但是它仍然失败。有人知道我错了什么吗?

1 个答案:

答案 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命令。