对于批处理文件中的数组循环

For loop over array in batch file

我需要一些帮助。 此代码

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

有结果 if echo %%a

 sample
 sample_test
 test_sample

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

 test_sample

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

上获得相同的输出

你需要一个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%

这样就可以了:

@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!