繁体   English   中英

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

[英]How to Print Variable inside loop in batch script?

@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 


)

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

谢谢

@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报告是由于在解析for命令时 test没有值因此它作为没有参数的echo执行,这会生成错误状态报告。

如果要回显可能为空的变量,请使用ECHO的怪癖

ECHO(%potentiallyemptyvar%

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

我认为你缺少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
)

您需要做的就是在关闭大括号后添加术语“ENDLOCAL”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM