フォルダー内のサブディレクトリに含まれる複数のアーカイブを抽出し、アーカイブのあるフォルダーに結果を出力する方法を教えてください。
フォルダー内のサブディレクトリに含まれる複数のアーカイブを抽出し、アーカイブのあるフォルダーに結果を出力する方法を教えてください。
回答:
まず、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
以前にメモリに保存した前のディレクトリに戻ります。
これが誰かに役立つことを願っています。
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レベル下でなければなりません。
このコメントが誰かのお役に立てば幸いです。
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
現在のディレクトリで再帰的検索を開始し、.zipで終わるすべてのファイルを見つけて、それをループにパイプします。見つかったすべてのファイルに対して、ファイルに対してunzipコマンドを実行し、出力をファイルのディレクトリに振り分けます。
ただし、上記の答えは機能しますが、とを実行Windows 64-bit
している7-Zip 32-bit
場合、正しいパスはC:\Program Files (x86)\7-Zip
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
)