1

私の理解によると、以下のコマンド (デバッグ行を追加 - インデント) は、エコーの出力をファイルにリダイレクトする必要があります。

ただし、if exist %test0% 常にエコーの出力でファイルを埋める (存在しない場合は作成する) ようです。

誰が何が悪いのか知っていますか?

@echo off
type test.bat
set test0="e:\documents and settings\administrator\desktop\test.log"
   echo.&echo.
   if exist %test0% (echo !!Exists!!) else (echo !!Doesn't Exist!!)
(if exist %test0% echo.&echo.&echo -------------------------------------------------&echo.&echo.)>>%test0%

そして、ファイルが作成されます(!)




編集:これは単純化された例であり、残念ながらMSaltersの回答は完全なコマンドを解決するのに役立ちません(そうなると思っていました)。完全な 1 行の if ステートメントは次のとおりです。
if exist %test0% (echo.&echo.&echo -------------------------------------------------&echo.&echo.) else (set /p .=<nul)>>%test0%&set errorlevel=0||set errorlevel=1

ファイルへの一致した出力の条件をどのように設定ifし (ファイルへの参照が 1 つだけであることが望ましいか、つまり、各if条件で 1 つではなく)、ファイルの ance にerrorlevel基づいてセットを設定するにはどうすればよいでしょうか?exist

実際の完全なコマンドの問題を手伝ってくれる人はいますか?

4

2 に答える 2

2

ERRORLEVEL を直接設定しないでください。その名前は、前のコマンドの結果を報告するために予約されています。値を直接設定すると、意図した機能がオーバーライドされ、実際の ERRORLEVEL に展開されなくなり、代わりに設定した値に展開されます。それはあらゆる種類のコードを壊す可能性があります。

既知の結果でコマンドを実行し、必要に応じて出力を nul にリダイレクトすることで、ERRORLEVEL を値に強制することができます: ver >nulERRORLEVEL を 0 にset /p .=<nul設定し、ERRORLEVEL を 1 に設定します。

cmd /c exit /b Nを使用して、選択した特定の値に ERRORLEVEL を強制することができNます。

また、論理に誤りがあります。条件が TRUE または FALSE に評価されるかどうかに関係なく、IF コマンドは成功します (エラーは発生しません)。ERRORLEVEL を設定する場合は、括弧で囲まれたブロック内で行う必要があります。

すべてを 1 行にまとめても問題はありませんが、あなたのような複雑なステートメントに複数行を使用すると、コードが読みやすくなります。以下はあなたが探しているものだと思います。

if exist %test0% (
  echo.
  echo.
  echo -------------------------------------------------
  echo.
  echo.
  ver >nul
) >>%test0% else (
  set /p .=<nul
)

コメントに応じて編集

変更はあまり必要ありません。

if exist %test0% (
  (
    echo.
    echo.
    echo -------------------------------------------------
    echo.
    echo.
    set ERR=0
  ) >>%test0%
) else (
  copy nul %test0%
  set ERR=1
)
于 2013-02-05T15:17:41.447 に答える
0

括弧を確認してください。の出力をに(x) >> output.logリダイレクトします。つまり、出力が何であるかに関係なくリダイレ​​クトが発生し、特に常にファイルが作成されます。xoutput.log

if Y (echo Text >> output.log)ここで、リダイレクトを書くと、条件付きにYなり、発生しない可能性があります。

[編集] 質問の言い回しを考えると、簡単な解決策は次のようになります。

  1. %ERRORLEVEL%に基づいて設定しexist %test0%ます。この時点でリダイレクトは発生していません。
  2. 何をすべきかを決定するために使用%ERRORLEVEL%します。を変更%test0%せずに変更でき%ERRORLEVEL%ます。

ところで、ERRORLEVEL は %ERRORLEVEL% ではありません

于 2013-02-05T08:16:21.373 に答える