3

バッチを使用してファイルを解凍するための条件を作成する必要があります。

方法は次のとおりです。dummy=1 の場合、バッチは xlsx ファイルを特定のフォルダーに解凍します。それ以外の場合、別の xlsx ファイルをそのフォルダーに直接コピーします。

私のコードは次のとおりです。

set dummy=1

If %dummy% EQU 1 (
SET CHEMIN=C:\file_to_unzip
cd %CHEMIN%
for /f %%j in ('dir /b %CHEMIN%\*.zip') do (
C:\PROGRA~1\WinZip\Winzip32 -min -e -o -j %CHEMIN%\%%j %CHEMIN%
) 
COPY "C:\file_to_unzip\*.xlsx" "C:\destination" 
) else (
COPY "C:\file_to_copy\*.xlsx" "C:\destination"
)

問題は、IF 条件がないと、unzip コマンドが正しく機能することです。ただし、IF 条件が含まれると、cmd は zip ファイルが見つからないことを示します。この問題の原因と解決方法がわかりません。

どんな助けでも感謝します。

4

1 に答える 1

1

遅延拡張を有効にしましたか?setlocal enabledelayedexpansion 上記のサンプルコードでは、ifステートメント内にCHEMIN変数が設定されているために失敗が発生します。変数が括弧スコープ内に設定されている場合、その変数に設定された新しい値は、すべてのサブスコープが終了するまで使用できません。次のスクリプトを実行して、意味を確認してください。

@echo off
set "xValue=1"
echo.%xValue%
if 1 EQU 1 (
    set "xValue=2"
    echo.%xValue%
    echo.!xValue!
)

遅延拡張が無効になっている場合(デフォルトでは無効になっています)、結果は次のようになります。

1
1
1

有効になっている場合setlocal enabledelayedexpansionは、最初に追加します

1
1
2

次のようにスクリプトを試してください。使用するには

setlocal enabledelayedexpansion

set dummy=1

If %dummy% EQU 1 (
    SET CHEMIN=C:\file_to_unzip
    cd !CHEMIN!
    for /f %%j in ('dir /b !CHEMIN!\*.zip') do (
        C:\PROGRA~1\WinZip\Winzip32 -min -e -o -j !CHEMIN!\%%j !CHEMIN!
    )
    COPY "C:\file_to_unzip\*.xlsx" "C:\destination" 
) else (
    COPY "C:\file_to_copy\*.xlsx" "C:\destination"
)

もう1つの解決策は、set CHEMIN=C:\file_to_unzip行をifステートメントの外に移動することです。

于 2012-12-10T04:11:25.453 に答える