for /d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
私はあなたの例からZIP1ファイルがzip1.zipであり、各サブフォルダに多くのzipファイルがあるかもしれないと仮定。しかしそうでなければ、これは1つのzipファイルに対しても機能します。また、スクリプトの最後には、w/oなしのzipファイル用の代替手段があります。.zip
これらは私がテストに使ったファイルです。スペースを使ってパス名に対してバッチスクリプトをテストするのが常に良いので、 "サブフォルダ"には意図的なスペースがあります。
C:\temp\folder\sub folder1\zip1.zip
C:\temp\folder\sub folder1\zip1b.zip
C:\temp\folder\subfolder2\zip2.zip
C:\temp\folder\subfolder2\zip2b.zip
C:\temp\folder\subfolder3\zip3.zip
C:\temp\folder\subfolder3\zip3b.zip
C:\temp\folder\subfolder4\zip4.zip
C:\temp\folder\subfolder4\zip4b.zip
unzipはWindowsコマンドではありません。それは多くの情報源から来る可能性があるので、そのパラメータの形式が異なる可能性があります。私の例では、私は7zipを使用しています。
とにかく、出力ディレクトリをunzipユーティリティ(またはCD)で指定する必要があるでしょう。私のサンプルは、その名前を取得する方法を示しています。最後にはスラッシュがありますが、これは7zでも問題ありませんが、他のユーティリティには問題があるかもしれません。それを取り除くことは可能ですが、より多くのコードが必要になります。
すべてのzipファイルを独自のディレクトリに抽出するように求めました。しかし、2つのzipファイルに同じ名前のファイルが含まれていると、それらは互いに上書きされます。そのため、zipファイルと同じ名前で各zipを独自のフォルダに抽出することが望ましい場合があります。このためには、フォルダを作成しなければならず、スクリプト全体で複数の行にする必要があります。私も/ F場合、DIRコマンド
を活用バージョン、あなたがより深くして、より多くの再帰的にこのコマンドを使用したいためを含める理由です/ dの
ために対する不信感があり
パス:folder\subfolder3\more\paths\zip1.zip
、これも可能です。以下のサンプルからfor /f
を使用し、dir
コマンドに/s
を追加してください:'dir *.* /s /ad /b'
for /d %%r in (*) do for %%s in ("%%r\*.zip") do 7z x -y "%%s" -o"%%~dps"
、ここで全体のテストケーススクリプトです:
@echo off
echo ******
echo List all zip files using for /f
echo ******
for /f "tokens=*" %%r in ('dir *.* /ad /b') do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
echo.
echo ******
echo List all zip files using for /d
echo ******
for /d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
echo.
echo 1: extract to folders containing zip files - possible overwrites
echo 2: extract each zip to a folder named by the name of the zip file
choice /c 12
if not errorlevel 2 (
for /d %%r in (*) do for %%s in ("%%r\*.zip") do 7z x -y "%%s" -o"%%~dps"
) else (
rem ------ this is the alternative to extract each zip to its own folder
for /d %%r in (*) do for %%s in ("%%r\*.zip") do (
echo.
echo ******
echo *** Unzipping: %%s to folder: %%~dpns
mkdir "%%~dpns"
7z x -y "%%s" -o"%%~dpns"
)
rem ------
)
pause
exit /b
In case zip files does not have .zip extension:
for /d %%r in (*) do for %%s in ("%%r\*.*") do (
echo.
echo ******
echo *** Unzipping: %%s to folder: %%~dpns-unzipped
mkdir "%%~dpns-unzipped"
7z x -y "%%s" -o"%%~dpns-unzipped"
)
'unzip'は、Windows標準のコマンドではありません
このコマンドは、あなたが求めて何をすべき。それはどこから来ますか? – npocmaka
'(* /%RR)'は動作しません。 Windowsコマンドインタープリタでは、パス内のワイルドカードはサポートされていません。 2つ目のパーセント記号がなくなっています。これは明らかに2つの '% 'の代わりに2つの' R'があるので、入力ミスです。 Windowsのディレクトリ区切り文字はスラッシュ文字ではなく円記号です。そのような短い行では多くの間違いがあります。コマンドプロンプトウィンドウで '/ for'を実行して、このコマンドの出力ヘルプを読んだことがありますか? – Mofi
nice私はそのヘルプコマンドについて知りませんでした。私はそのコマンドでオリジナルの答えを編集しましたが、質問を改善するだけでしたが、私は最後までバッチファイルで最後のコマンドを貼り付けました。 – Snickdx