0

私が抱えている問題を説明するために、次のコード行に要約した長いスクリプトがあります。StackOverflow ユーザーからの提案を試してみましたが役に立たなかったので、あなたのフィードバックが私と将来のユーザーに役立つことを願っています。注: このコードは、pdfREP ネストされた変数の設定を除いて機能します。

SETLOCAL が有効な遅延拡張
pdfREP=false を設定

for /f "tokens=1" %%a in ('dir /o /b \\path2document\*.rp?') do (
    findstr "," \\path2log\%%a > 1.log
    エラーレベル 0 でない場合 (
        :: 何かをする
        )
    エラーレベル 0 の場合 (
        findstr /B /I "p" \\path2document\%%a > 1.log
        エラーレベル == 0 の場合 (
            pdfREP=true を設定
            エコー RSP ファイル: %%a >> 2.log
        )
    )   
)

基本的に問題は、 \path2document に複数のファイルがあり、それぞれの中でコンマを探すことです。コンマが見つからない場合は、ファイルのテキスト内に特定の文字があるかどうかを知りたい. テキストが見つかった場合、以前に定義された変数を FALSE ではなく TRUE に設定しています。ただし、「if errorlevel == 0」は、異なる構文 (%errorlevel%==0,%errorlevel% EQU 0) の場合に true になる可能性があり、変数 pdfREP を TRUE に設定しません。ループの繰り返しが終わるまで変数が設定されないという問題がある場合、コードの残りの部分でこの変数を使用するにはどうすればよいでしょうか? この変数は後で使用したいので、設定することが最も重要です。フィードバックをお寄せいただきありがとうございます。

4

2 に答える 2

2

Windows バッチには、ネストされた変数を処理する「興味深い」方法があります。 この記事が役立つかもしれません。

個人的には、バッチ ファイルがこれほど複雑になると、別の言語に切り替えます。私の最初の選択肢は通常 Python ですが、Microsoft エコシステム内にとどまりたい場合は、vbscript または PowerShell が機能します。

于 2012-06-12T20:57:34.130 に答える
2

IF コマンドと errorlevel 値を誤用しています。

IF コマンドの説明は、条件で ERRORLEVEL ワードの後に​​特定のエラーレベルを示す数字を直接使用できることを示しています。このように、次の 2 つの IF コマンドは正しいです。

if not errorlevel 0 (
    :: do something
    )
if errorlevel 0 (

ただし、次のコマンドは不適切に記述されています。

if errorlevel == 0 (

この場合、!errorlevel! を使用する必要があります。最後の行を実行した後に現在の 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
)
于 2012-06-13T03:12:56.330 に答える