2012-03-29 8 views
1

異なるジョブを実行するためにバッチファイルが必要なWindows 2003サーバーでは、スケジューリングシステムを使用します。私は、ファイルが存在するかどうかをチェックし、ファイルが空でないことを比較し、結果に基づいて何かを行う1つの仕事を持っています。私がこれを実行するたびに返されるエラーレベルは0ですが、ファイルは異なります。私は返された1を見ることを期待しています。ファイルが異なる場合にバッチファイル比較が0に戻る

ファイルの場所を確認しましたが、1つのファイルにはコンテンツがあり、もう1つは空です。私は、セットアッププロンプトをしました、そして、彼らは彼らのすべては、%ERRORLEVEL%は0ですが、私もバッチジョブで同じディレクトリになるようにファイルを移動していると言うが、彼らはまだ0

コードを示しています。

echo %ERRORLEVEL% 
IF EXIST data.DON ( 
echo before %ERRORLEVEL% 
    FC data.DON ZERO.SEQ 
echo after %ERRORLEVEL% 
    IF %ERRORLEVEL% EQU 1 GOTO :PROCESS 
) 

出力:

16:37:08.12 Thu 03/29/2012 
>IF EXIST data.DON (
echo before 0 
FC data.DON ZERO.SEQ 
echo after 0 
IF 0 EQU 1 GOTO :PROCESS 
) 
before 0 
Comparing files data.DON and ZERO.SEQ 
***** data.DON 
Name|Date|Location  

***** ZERO.SEQ 
***** 

after 0 

私は別のデータファイルを指して、同じサーバー上の他のジョブでは、この正確なコードを持っており、それが動作します。私は何を試すことができるの任意のアイデア?

答えて

3

変数は前は、括弧を入力していました:

set var=Old value 
(set var=New value & echo %var%) 

前のコードは常に表示さ:旧値

setlocal EnableDelayedExpansion 
set var=Old value 
(set var=New value & echo !var!) 

以前のすべての記述も変数をERRORLEVELに適用するので、すべての%errorlevel%を置き換える:あなたはパーセント代わりに感嘆符で変数を囲み、先頭にSETLOCALコマンドを追加し、つまり、遅延拡張を使用する必要があり、この問題を解決するために!errorlevel!でコードを挿入し、前のSETLOCAL ...を挿入します。

+0

ありがとうございました。私はチェックをifループの外に移動してしまい、それが私のために働いた。 – MikeL

+0

もちろん!カッコ内に%errorlevel%を使用すると、この問題は解消されます。しかし、注意!同じ行のいくつかのコマンドを組み合わせて、&:を使用すると問題は残っています。上記の最初の例では、かっこを削除しても「古い値」が表示されます。 – Aacini

1

errorlevelをチェックする正しい方法は、このようなものです:あなたがどんな%は内部括弧変数%の値を置き換える場合は、その値が同じである、

IF EXIST data.DON ( 
    FC data.DON ZERO.SEQ 
    IF ERRORLEVEL 1 GOTO :PROCESS 
) 
関連する問題