[英]Win batch: setting variable within nested loop not working
解決:
我有一個很長的腳本,已濃縮為以下代碼行,以說明我遇到的問題。 我已經嘗試過StackOverflow用戶的一些建議無濟於事,因此希望您的反饋對我和未來的用戶有所幫助。 注意:此代碼有效,除了設置pdfREP嵌套變量。
SETLOCAL enabledelayedexpansion set pdfREP=false for /f "tokens=1" %%a in ('dir /o /b \\path2document\*.rp?') do ( findstr "," \\path2log\%%a > 1.log if not errorlevel 0 ( :: do something ) if errorlevel 0 ( findstr /B /I "p" \\path2document\%%a > 1.log if errorlevel == 0 ( set pdfREP=true echo RSP File: %%a >> 2.log ) ) echo the value of pdfREP is !pdfREP! )
基本上,問題是在\\ path2document中我有多個文件,並且在每個文件中我都尋找一個逗號。 如果找不到逗號,那么我想知道文件文本中是否有特定字母。 如果找到了文本,則我將先前定義的變量設置為TRUE,而不是FALSE。 但是,如果語法不同(%errorlevel%== 0,%errorlevel%EQU 0),則“ if errorlevel == 0”可以為true,並且不會將變量pdfREP設置為TRUE。 如果問題是直到循環迭代之后才設置變量,那么如何在其余代碼中使用該變量? 我想稍后使用此變量,因此設置它非常重要。 感謝您的任何反饋。
解決方案:我正在設置的變量沒有顯示它的當前值,因為我使用的是延遲擴展,並且它使我困惑,看不到該值,因此它不是一個問題。 由於我在循環中使用變量值,因此我需要使用!訪問變量的當前值。 圍繞變量名而不是%。
Windows批處理具有處理嵌套變量的“有趣”方式。 本文可能會有所幫助。
就個人而言,當我的批處理文件變得如此復雜時,我會切換到另一種語言。 我的首選通常是Python,但是如果您希望停留在Microsoft生態系統中,則可以使用vbscript或PowerShell。
您正在濫用IF命令和錯誤級別值。
如果命令說明表明您可以在這種情況下直接使用ERRORLEVEL字,后跟一個表示給定錯誤級別的數字。 這樣,以下兩個IF命令是正確的:
if not errorlevel 0 (
:: do something
)
if errorlevel 0 (
但是,以下命令寫得不好:
if errorlevel == 0 (
在這種情況下,必須使用!errorlevel! 指示在執行最后一行之后采用當前錯誤級別值:
if !errorlevel! == 0 (
與以上所述無關,這是我要這樣做的方式:
if not errorlevel 0 (
echo The errorlevel is less than zero
) else if errorlevel 0 (
echo The errorlevel is greater than zero
) else (
echo The errorlevel is zero
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.