web-dev-qa-db-ja.com

このフォルダのサブディレクトリにあるすべてのアーカイブを抽出するにはどうすればよいですか?

フォルダー内のサブディレクトリに含まれている複数のアーカイブを抽出し、アーカイブがあるフォルダーに結果を出力するにはどうすればよいですか。

18
Dmitri Farkov

まず 7-Zip をインストールします。

内部にアーカイブを持つ多くのサブディレクトリを含むディレクトリのルートにbatファイルを作成します。次に、以下を貼り付けます。

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
)

バットを起動すると、すべてのrar/zipが含まれているフォルダーに解凍されます。

これはどのように機能しますか?

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

Forループは、現在のディレクトリ内のすべてのフォルダーをループし、パスを変数%%Fに入れます。

プッシュ%CD%

現在のディレクトリをメモリに入れます。

cd %% F

変数%%Fからフォルダーを現在のディレクトリとして設定します。

FOR %%X in (*.rar *.Zip) DO (

現在のフォルダー内のすべてのrarおよびZipファイルについては、次のようにします:

"C:\Program Files\7-Zip\7z.exe" x "%%X"

ファイルに対して7-Zipを実行します。一部のファイル名にはスペースが含まれているため、%%Xの前後に引用符が必要です。

popd

以前にメモリに保存した前のディレクトリに戻ります。

これが誰かに役立つことを願っています。

22
Dmitri Farkov

Windows Vistaからスクリプトを実行するときに問題が発生しました。コードを実行したところ、何も起こりませんでした。スクリプトを実行するには、管理者である必要がありました。 .batファイルを右クリックして「管理者として実行」すると、何らかの理由でsystem32フォルダーで起動したため(正しく覚えていれば)、動作しませんでした。これを解決するには、Windows環境変数(ここで説明します: Windows環境変数 )%〜dp0を使用して、スクリプトが実行されたディレクトリに戻ります。

@echo on
cd %~dp0

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
)

* .rarまたは* .Zipファイルがスクリプトと同じレベルにないことを確認してください。それらは1レベル下でなければなりません。

このコメントが誰かのお役に立てば幸いです。

3
Daniel P

上記の回答は機能しますが、_Windows 64-bit_および_7-Zip 32-bit_を実行している場合、正しいパスは7-Zipの場合はC:\Program Files (x86)\7-Zipです。以下は私のために働いたスクリプトです。

_@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
    FOR %%X in (*.rar *.Zip) DO (
        "C:\Program Files (x86)\7-Zip\7z.exe" x %%X
    )
    popd
)
_
1
Ryan
find . -name "*.Zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

現在のディレクトリで再帰検索を開始し、.Zipで終わるすべてのファイルを見つけて、それをループにパイプします。見つかったすべてのファイルについて、ファイルに対してunzipコマンドを実行し、出力をファイルのディレクトリにシャントします。

1
Curtis Tasker