2

バッチ ファイルから次の出力を取得しようとしています。

 ERRORLEVEL has been reset from 4 to 0

... 次のコードを使用して:

 @echo ERRORLEVEL has been reset from %errorlevel% to & verify>nul & @echo %errorlevel

... 問題は、1) errorlevel がゼロにリセットされないこと、および 2) 最後にキャリッジ リターンが返されることです。

 ERRORLEVEL has been reset from 4 to 
 4

...それを個々の行に分けると、次のように機能します。

 @echo Reset ERRORLEVEL
 verify>nul
 @echo ERRORLEVEL = %errorlevel

...出力は次のとおりです。

 Reset ERRORLEVEL
 ERRORLEVEL = 0

私は確かにバッチ ファイルを作成する初心者ですが、多くの試行錯誤と調査を行ってきました。このサイトを検索したときに見つけたものに基づいて、「verify>nul」を使用してエラーレベルをリセットしています。@echo の使用についての私の理解は、@ 記号が出力されるコマンドを抑制するということです。どんな助けでも大歓迎です、ありがとう!

4

4 に答える 4

1

コードで %ErrorLevel% の 2 つの異なる値が表示されない理由は、コマンドが実行される前にコマンド ライン全体で環境変数が置換されるためです。その後、コマンド ラインが実行されます。ただし、 verコマンドの実行後に 2 番目の置換が発生する必要があります。

まず、遅延展開を利用できます。感嘆符で囲まれた環境変数は、コマンドが実行されようとしているときにのみ展開されます。このモードをオンにするには、SETLOCAL ENABLEDELAYEDEXPANSIONを実行する必要があります。

SETLOCAL ENABLEDELAYEDEXPANSION

ECHO ERRORLEVEL has been reset from !ERRORLEVEL! to & verify>nul & ECHO !ERRORLEVEL!

(ちなみに、Delayed Expansion はコマンド ラインではなく、バッチ ファイルでのみ機能するようです)。

残念ながら、ECHO コマンドで新しい行が表示されないようにする方法はありません。したがって、代わりに、各コマンドを 1 行で実行する必要があります。しかし恐れる必要はありません。必要な値をすべて保存し、すべての出力を 1 行で行うだけです。

したがって、コードは次のようになります。

@ECHO OFF
SET OriginalErrorLevel=%ERRORLEVEL%
verify>nul
SET NewErrorLevel=%ERRORLEVEL%
ECHO ERRORLEVEL has been reset from %OriginalErrorLevel% to %NewErrorLevel%

ちなみに、すべてのコマンドの前に「@」を付ける必要はありません。すべてのスクリプトの先頭で@ECHO OFFを使用するだけで、後でECHO ONを使用しない限り、コマンドは表示されません。

于 2014-04-03T23:35:34.320 に答える
-1

このメソッドはすべてのケースで機能します: (同じバッチ内だけでなく)

@echo off&cls
set $error=%errorlevel%
ver > nul
echo ERRORLEVEL has been reset from %$error% to 0
于 2014-04-03T20:29:07.130 に答える
-1
@echo off
setlocal EnableDelayedExpansion

call :seterr 4
verify>nul&echo ERRORLEVEL has been reset from %errorlevel% to !errorlevel!

GOTO :EOF

:seterr
exit /b %1

%errorlevel%これは、実行前の解析時における実際のエラーレベルに置き換えられる通常の解析特性を利用します。!errorlevel! **WILL** be resolved to the runtime-value oferrorleveldelayedexpansion`ifが呼び出されました。

に値を割り当てないでくださいerrorlevel。これは"magic variable"- システムによって確立されますが、ユーザーが明示的に行った設定によって上書きされます。このカテゴリのその他の変数はtime、 、 、dateおよびcdです。

サブルーチンcallへのは、エラーレベルを設定するように設計されています - この場合は 4...seterr

于 2014-04-04T00:29:48.967 に答える