簡體   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