批处理文件结果每次都不正确

时间:2020-10-08 07:31:16

标签: batch-file cmd

我想拆分一个单词,并在数字上加一个。 例如:从dev_111到dev_112 因此,我像下面那样编辑批处理文件,但是它在第一次执行和第二次执行时无效,但是在第三次执行时无效。

批处理脚本

@echo off

FOR /f "tokens=1,2 delims=_" %%a IN ("dev_111") do (
    echo %%a
    echo %%b
    SET /a c=%%b+1
    echo %c%
    SET d=%%a_%c%
    echo Create folder %d%?
)

结果

C:\Users\aaa>bbb_.bat
dev
111
Echo is not defined
Create folder ?

C:\Users\aaa>bbb_.bat
dev
111
112
Create folder dev_?

C:\Users\aaa>bbb_.bat
dev
111
112
Create folder dev_112?

有人能解决这个问题吗?我不知道为什么会这样。

1 个答案:

答案 0 :(得分:0)

您需要延迟扩展:

@echo off
setlocal enableextensions enabledelayedexpansion

FOR /f "tokens=1,2 delims=_" %%a IN ("dev_111") do (
    echo %%a
    echo %%b
    SET /a c=%%b+1
    echo !c!
    SET d=%%a_!c!
    echo Create folder !d!?
)

endlocal

读取整个for循环,并在执行任何一个指令之前 替换变量。这意味着%c%之类的东西将被替换为循环之前保存的值,这意味着您在循环中分配给它们的任何内容都不可用。

通过使用延迟扩展和!替换字符,当在 循环内对行进行求值时,替换发生。


您的原始脚本在后续运行中的行为有所不同的原因是因为设置了变量 ,直到for循环结束后才可以看到它们。这意味着它们将处于环境中(例如,运行后为ese echo %d%),为下一次脚本运行做好准备(尽管如果每次更改它们,您将始终具有从之前的运行)。

相关问题