【问题标题】:For loop over array in batch fileFor循环遍历批处理文件中的数组
【发布时间】:2015-02-12 06:11:26
【问题描述】:

我需要一些帮助。 这段代码

for /f "usebackq delims=" %%a in (`
    mysql -u%dbUser% -e "SHOW DATABASES LIKE '%%sample%%';" 
    ^| findstr /l /v /c:"Database" /c:"information_schema"
`) do set a=%%a

如果 echo %%a

则有结果
 sample
 sample_test
 test_sample

但是当我添加 echo %a% 时,在带有该代码的 for 循环之后 结果只有

 test_sample

怎么可能我仍然可以在 echo %%a

上获得相同的输出

【问题讨论】:

  • 所以,从previous question 开始,它连接变量中的数据库名称,如果我理解你,你需要在名称之间存储换行符。对吗?

标签: arrays batch-file for-loop


【解决方案1】:

这样就可以了:

@echo off
setlocal EnableDelayedExpansion

set LF=^
%empty line%
%empty line%

for /f "usebackq delims=" %%a in (`
    mysql -u%dbUser% -e "SHOW DATABASES LIKE '%%sample%%';" 
    ^| findstr /l /v /c:"Database" /c:"information_schema"
`) do set "a=!a!%%a!LF!"

echo !a!

【讨论】:

    【解决方案2】:

    你需要一个delayed expansion

    setlocal enableDelayedExpansion
    for /f "usebackq delims=" %%a in (`
        mysql -u%dbUser% -e "SHOW DATABASES LIKE '%%sample%%';" 
        ^| findstr /l /v /c:"Database" /c:"information_schema"
    `) do (
     set "a=!a! %%a"
     echo !a!
    )
    echo %a%
    

    【讨论】:

    • 先生,我已经这样做了。我想要的是当我在 for 循环之外添加另一个代码 echo !a! 时。输出只是 test_sample 其中我想显示 sample sample_test test_sample 与 !a!在 for 循环中。
    • @xXxrk04 - 所以你想将结果附加到 %a%?
    • !a!的结果是sample sample_test test_sample%a%的结果只有test_sample .. 我希望 %a% 具有与 !a! 相同的输出
    • @xXxrk04 - 不确定你的意思。最后一个echo %a% 应该包含所有行......?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多