web-dev-qa-db-ja.com

.batファイルまたはdosコマンドを使用して、ディレクトリ(サブフォルダーを含む)内のすべてのZipを抽出します

フォルダ内のすべての.Zipと.rarsとその子を抽出したい

構造は次のようになります。

MAIN_FOLDER
    -A folder
        - a.Zip
            -a.rar
    -B folder
        - b.Zip
            -b.rar
    -C folder
        ....    
            ...

私はすでにこれを試しましたが、うまくいきませんでした

FOR /D /r %%F in ("*") DO (

  pushd %CD%
 cd %%F
    FOR %%X in (*.rar *.Zip) DO (
        "C:\Program Files\7-Zip\7z.exe" x %%X
    )
 popd

)

私はWindowsを使用しており、7-Zipをインストールしています。

追加の質問:最後の子(a.rar、b.rar)から抽出されたすべてのファイルを1つの同じフォルダー(メインフォルダー)に保存できますか?

6
Email

スクリプト:

for /F %%I IN ('dir /b /s *.Zip *.rar') DO (
    "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
)

説明:

for /F %%I IN ('dir /b /s *.Zip *.rar') DO (

これにより、コマンドdir /b /s *.Zip *.rarによって返されるファイルごとにループが実行されます。 /sは、サブディレクトリに再帰するようdirに指示し、/bをベアフォーマットで出力します。

ファイル名は、後で使用するために%%I変数に保存されます。プロンプトでこれを入力する場合は、代わりに%Iを使用します。

"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"

これにより、抽出が実行されます。引数-o"%%~dpI"は、アーカイブが存在するのと同じディレクトリにファイルを抽出します。その他のオプション:

  • -o"%%~dpI" —アーカイブが存在するディレクトリに抽出します。

  • -o"%%~dpnI" —アーカイブにちなんで名付けられた階層に新しいディレクトリを作成し、そこに抽出します(つまり、AFolder\archive.ZipAFolder\archive\に抽出します)。

  • -o"%%~nI" —アーカイブにちなんで名付けられた現在のディレクトリに新しいディレクトリを作成し、そこに抽出します(つまり、AFolder\archive.Zip.\archive\に抽出します)。

  • -o引数を省略します—現在のディレクトリに抽出します。

例:

C:\Temp>tree /F

    Folder PATH listing
    Volume serial number is 08A4-22E0
    C:.
    │   batch.bat
    │
    ├───AFolder
    │       a.Zip
    │
    ├───BFolder
    │       b.Zip
    │
    └───CFolder
            c.Zip



C:\Temp>batch.bat > nul


C:\Temp>tree /F

    Folder PATH listing
    Volume serial number is 08A4-22E0
    C:.
    │   batch.bat
    │
    ├───AFolder
    │       a.Zip
    │       a.Zip.txt
    │
    ├───BFolder
    │       b.Zip
    │       b.Zip.txt
    │
    └───CFolder
            c.Zip
            c.Zip.txt
12

これは、スペース( "DELIMS =")を含むファイル名をサポートし、上書き(-aos)をスキップするための承認済み回答の更新です。以下のリンクと更新されたコードを参照してください。ありがとう

。batファイルまたはdosコマンドを使用して、ディレクトリ(サブフォルダーを含む)内のすべてのZipを抽出しますhttps://stackoverflow.com/questions/12487491/how-to-handle-space- of-filename-in-batch-for-loophttp://7Zip.bugaco.com/7Zip/MANUAL/switches/overwrite.htm

for /F "DELIMS=" %%I IN ('dir /b /s *.Zip *.rar') DO (
    "H:\Program Files\7-Zip\7z.exe" x -aos -o"%%~dpI" "%%I"
)
2
YGJ

私は何年も前から sweep.exe を使用しています。現在のディレクトリとすべてのサブディレクトリで同じコマンドを実行します。

アーカイブ内のアーカイブを抽出する場合は、スイープを複数回実行する必要がある場合があります。

あなたは次のようなものを使うことができます:

sweep 7za x -y *.Zip

現在のフォルダー内のすべての.Zipファイルとその下のすべてのフォルダーを開くには。

7Zipコマンドラインバージョンは次のとおりです: http://www.7-Zip.org/download.html

1
Sun

あなたが探していると思います forfilesコマンド

  • forfiles /s /m *.Zip /c "7z x @file"

  • forfiles /s /m *.rar /c "7z x @file"

1
Miles Erickson
7z e -an -air!*.rar -r

現在のディレクトリのサブフォルダから現在のフォルダにすべてのrarファイルを(再帰的に)抽出します。 Zipファイルの場合は-air!*。Zipに変更します。

0
rob2universe
@echo off

FOR /R %%g IN (.) DO TITLE Extracting from %%~ng & "%~dp07z.exe" x -aou "%%g\*.rar" -o"%%g" & "%~dp07z.exe" & CLS

これをテキストファイルにコピーし、名前をextract.batに変更して、アーカイブのある他のフォルダーを含む親フォルダーに配置します。 7z.exeextract.batファイルと同じフォルダーに配置するか、上記のコマンドでパスを変更して、7z.exeのインストール場所を反映させます。これにより、各サブフォルダー内のすべてのRARがRARと同じサブフォルダーに抽出されます。それは(私のガールフレンドのように)「ハウスクリーニング」をしません...

必要に応じて*.rarを調整してください。

0
Kevin