【问题标题】:For loop results are not as expected in batch file批处理文件中的 for 循环结果与预期不符
【发布时间】:2014-09-28 18:50:55
【问题描述】:

下面的 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%

【问题讨论】:

    标签: windows batch-file scripting


    【解决方案1】:
    @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
    

    在延迟扩展下,当定义变量并在括号内访问时 - 应使用 ! 而不是 %

    【讨论】:

    • 感谢您的快速回复。我很感激你的时间。现在我正在检查文件,然后去打排球;)
    • 我又添加了一条语句来修剪前导和尾随空格,但这不起作用。设置 bundle=!bundle:~0,-1%
    • @rits - 删除 "tokens=*" - 如果您没有超过 1 个单词的行,这将起作用。
    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2023-03-27
    相关资源
    最近更新 更多