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。我想打印测试变量
谢谢
@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
调用delayedexpansion
mode,其中!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
命令的一部分 - 它在圆括号的嵌套中不发挥作用......