Batch file 每次批处理文件结果都不正确
我想拆分一个单词,在数字上加上一个。 ex)从dev_111到dev_112 所以我像下面这样编辑批处理文件,但它不适用于第一次和第二次执行,而是第三次执行 批处理脚本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
@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
循环完成后才能看到它们。这意味着它们将在环境中(例如,运行后,eseecho%d%
),为下次脚本运行做好准备(不过,如果它们每次都更改,您将始终从上次运行中设置值)