1

私はここに来たばかりで、私の英語はあまり上手ではありません。まず、ご容赦ください。

私の問題は、このバッチが変数「IF EXIST %FSIZE%」内の文字列を読み続けることです。つまり、変数が存在しない場合、バッチは () 括弧内を読み続け、代わりに残りの文字列に進みます。

%FSIZE% が存在する場合、バッチは割り当てられた 2 つのタスクを実行します。(1.) サイズが等しい場合、cifiles5x に移動します。(2.) サイズが等しくない場合、7z を使用して必要なファイルを抽出します。

%FSIZE% が存在しない場合、バッチは「765952 は現時点では予期されていませんでした」と言い続けます。

ss64.com で、数値を比較するときに括弧や引用符を使用しないなどのアドバイスを受けています (%size% EQU 765952) が、) が終了する場所まで続けない理由がわかりません。

また、コマンドを「&&」でリンクしようとしたので、括弧を消去できますが、結果は同じです。

引用符なしで 2 つの間隔をあけたパッチがあることはわかっています。私が行った場合、サイズチェッカーが機能しないため、それらは引用されていません。

これを読んでくれてありがとう。 編集:提案に従ってバッチが変更されました。

@ECHO OFF
TITLE Log checker
COLOR 0F
SET FSIZE=%ProgramFiles(x86)%\Ces\Log Files Ver\LogVbReg_r2.dll
SET InsDIR=%ProgramFiles(x86)%\Ces\Log Files Ver\
REM I didn't add "" on FSIZE and InsDIR because if i did, quote the variable will
REM result a doubled quoted patch and won't work.
CLS
ECHO ==============================================================================
ECHO =                                Log checker                                 =
ECHO ==============================================================================
ECHO Checking if exist:
ECHO "%FSIZE%"
IF EXIST "%FSIZE%" (
ECHO It does exist, checking size...
FOR %%A IN ("%FSIZE%") DO SET SIZE=%%~ZA
IF "%SIZE%" EQU "765952"
ECHO Size is right, jumping to CIFILES5
GOTO CIFILES5x 
) ELSE (
ECHO Size is not right, extracting the needed file...
7z.exe e "Data_X.*" -o"%InsDIR%" -y "LogVbReg_r2.dll"
GOTO CIFILES5x)
ECHO Does not exist; extracting file...
REN Data_X.* Data_X.exe
Data_X.exe
TIMEOUT 2>NUL
REN DATA_X.* Data_X.dat
:CIFILES5x
ECHO Reach cifiles5x
PAUSE
IF EXIST "%TEMP%\9513.CES" (GOTO OPS) ELSE (GOTO LNKD)
4

2 に答える 2

0

いくつかの小さなエラーがあります:

  • ファイル名にスペースが含まれる可能性がある場合は、常に引用符で囲む必要があります。

存在する場合 "%FSIZE%" (

  • FOR /F は、ファイル CONTENTS を読み取るために使用されます。ファイル NAME を処理したい場合は、 /F オプションを使用せず、単純な FOR コマンドを使用します。

FOR %%A IN ("%FSIZE%") DO SET SIZE=%%~ZA

  • IF コマンドの ELSE 部分は、1 行だけで表示する必要があります。

GOTO CIFILES5x

) そうしないと (

  • 括弧についても同じことが言えます:

GOTO CIFILES5x

)

  • 開き括弧が同じ行にある場合を除きます。正解です:

IF EXIST "%TEMP%\9513.CES" (GOTO OPS) ELSE (GOTO LNKD)

  • 数値が等しいかどうかを比較する場合 (EQU、NEQ)、それらが引用符で囲まれているかどうかは関係ありません。GTR、GEQ、LSS、および LEQ の場合は、引用符を付けてはなりません。ただし、あなたの場合、これは問題ではありません...
于 2012-11-19T14:10:00.150 に答える
0

%FSIZE% のファイル名にスペースがあります。スペースの後の結果テキストとして、 のコマンドとして扱われifます。引用符を使用する"%FSIZE%"CD、最初にフォルダーに対して実行してから、ファイル名だけを確認してください。

于 2012-11-19T05:01:46.827 に答える