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

时间:2014-05-07 18:36:24

标签: 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 


)

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

谢谢

2 个答案:

答案 0 :(得分:2)

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

您需要setlocal enabledelayedexpansion来调用delayedexpansion模式,其中!var!var的运行时值。 %var%始终为parse-time值 - 即 - >循环(或块)之前的值

ECHO %%E也可以在此实例中使用(因为您已用于附加all...txt。)

echo is off报告是由test在解析for命令时没有值 引起的,因此它被echo执行没有参数,会生成错误状态报告。

如果您想回显可能为空的变量,请使用

ECHO中利用一个怪癖
ECHO(%potentiallyemptyvar%

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

答案 1 :(得分:1)

我认为你缺少SETLOCAL / ENDLOCAL行..任何时候你使用!在变量中,您需要使用SETLOCAL ..%用于标准批处理。

@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!              ::error 
ENDLOCAL
)