For循环结果与批处理文件中的预期不同

时间:2014-09-28 18:50:56

标签: windows batch-file scripting

以下for循环结果与我的机器上的预期不符。 我无法找出我做错了什么。

请在下面找到check.bat和softwareList.txt的代码清单。 softwareList.txt也位于check.bat所在的同一目录中。

check.bat

@echo off
call:updateVariables check
goto:eof

:updateVariables
set operation=%~1
echo %operation%
setlocal enabledelayedexpansion
for /F "tokens=*" %%A in (softwareList.txt) do ( 
set bundle=%%A
echo a. command %%A %operation%
echo b. command %bundle% %operation%
)
endlocal
goto:eof

以下是 softwareList.txt : -

maven 
tomcat 
derby
java
eclipse

预期结果: -

check
a. command maven  check
b. command maven  check
a. command tomcat  check
b. command tomcat  check
a. command derby check
b. command derby check
a. command java check
b. command java check
a. command eclipse check
b. command eclipse check

实际结果: -

check
a. command maven  check
b. command java check
a. command tomcat  check
b. command java check
a. command derby check
b. command java check
a. command java check
b. command java check
a. command eclipse check
b. command java check

另外,如何从for循环结果迭代中修剪尾部和前导空格? 我在for循环中使用下面的命令,但这不起作用: -

set A=%A:~0,-1%

1 个答案:

答案 0 :(得分:0)

@echo off
call:updateVariables check
goto:eof

:updateVariables
set operation=%~1
echo %operation%
setlocal enabledelayedexpansion
for /F "tokens=*" %%A in (softwareList.txt) do ( 
 set bundle=%%A
 echo a. command %%A %operation%
 echo b. command !bundle! %operation%
)
endlocal
goto:eof

在延迟展开时,定义变量并在括号内访问时,应使用!代替%