@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。 我想打印测试变量
谢谢
答案 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
)