簡體   English   中英

Win Batch:在嵌套循環中設置變量無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM