@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
值 - 即 - 循环(或 block )运行之前的值。
ECHO %%E
在这种情况下也会起作用(正如您在附加到 all...txt
时所使用的那样)
echo is off
报告是由以下事实引起的 test
解析 for 命令时没有值,因此它被执行为 echo
不带参数,生成错误状态报告。
如果你想回显一个可能为空的变量,利用 ECHO
中的一个怪癖通过使用
ECHO(%potentiallyemptyvar%
这里注意 (
被视为 echo
的一部分命令 - 它不参与圆括号的嵌套......
关于shell - 如何在批处理脚本中打印循环内的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23525681/