如何在批处理脚本中打印循环内的变量?

Sur*_*esh 3 shell loops batch-file

@ECHO OFF
set /A q=0

for /F "tokens=*"  %%E IN ('findstr /n /r "Finshed With Errors" D:\DataUploadUtil\UploadStatus\TariffUploadLog.txt') do (

set array[!q!]=%%E

set /A q=q+1


echo %%E >>D:\DataUploadUtil\UploadStatus\AllTariffsUploadStatus.txt

set test=%%E

echo %test%              ::error 


)
Run Code Online (Sandbox Code Playgroud)

在上面的脚本中,我尝试在循环中打印测试,其显示 ECHO IS OFF。我想打印测试变量

谢谢

Mag*_*goo 5

@ECHO OFF
setlocal enabledelayedexpansion
set /A q=0
for /F "tokens=*"  %%E IN (
  'findstr /n /r "Finshed With Errors" D:\DataUploadUtil\UploadStatus\TariffUploadLog.txt'
 ) do (
  set array[!q!]=%%E
  set /A q=q+1
  echo %%E >>D:\DataUploadUtil\UploadStatus\AllTariffsUploadStatus.txt
  set test=%%E
  echo !test!
)
Run Code Online (Sandbox Code Playgroud)

您需要setlocal enabledelayedexpansion调用delayedexpansionmode,其中!var!是 的运行时值var%var%始终是parse-time该值 - 即循环(或块)运行之前的值。

ECHO %%E在这种情况下也可以工作(正如您在附加到all...txt. 中所使用的那样)

echo is off报告是由于解析 for 命令时test没有值而导致的,因此它在不带参数的情况下执行,从而生成错误状态报告。echo

如果您想回显一个可能为空的变量,请ECHO使用以下方法来利用一个怪癖

ECHO(%potentiallyemptyvar%
Run Code Online (Sandbox Code Playgroud)

请注意,这里(被视为echo命令的一部分 - 它在圆括号的嵌套中不发挥作用......