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

Batch file 每次批处理文件结果都不正确,batch-file,cmd,Batch File,Cmd,我想拆分一个单词,在数字上加上一个。 ex)从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% e

我想拆分一个单词,在数字上加上一个。 ex)从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?

有人能解决这个问题吗?我不知道为什么会发生这种情况。

您需要延迟扩展:

@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%
),为下次脚本运行做好准备(不过,如果它们每次都更改,您将始终从上次运行中设置值)