2017-02-15 27 views
1

cmdバッチファイルを使用すると、ディレクトリ内のすべてのフォルダを反復処理し、各フォルダ内のすべてのzipファイルを解凍する方法はありますか?私はすべてのサブフォルダを反復する限りは取得できましたが、各サブフォルダ内を反復することはできません。すべてのサブフォルダ内のすべてのzipファイルを解凍する

FOR /D %%R IN ("*") DO FOR /D %%S IN (*/%RR) unzip %%S 

フォルダ構造

folder\subfolder1\zip1 
folder\subfolder2\zip2 
folder\subfolder3\zip3 
folder\subfolder4\zip4 

私はそれがフォルダをcontainting以内に抽出した各zipファイルの内容を持っていると思います。 zipファイルとサブフォルダの名前は異なります。

+2

'unzip'は、Windows標準のコマンドではありません

このコマンドは、あなたが求めて何をすべき。それはどこから来ますか? – npocmaka

+1

'(* /%RR)'は動作しません。 Windowsコマンドインタープリタでは、パス内のワイルドカードはサポートされていません。 2つ目のパーセント記号がなくなっています。これは明らかに2つの '% 'の代わりに2つの' R'があるので、入力ミスです。 Windowsのディレクトリ区切り文字はスラッシュ文字ではなく円記号です。そのような短い行では多くの間違いがあります。コマンドプロンプトウィンドウで '/ for'を実行して、このコマンドの出力ヘルプを読んだことがありますか? – Mofi

+0

nice私はそのヘルプコマンドについて知りませんでした。私はそのコマンドでオリジナルの答えを編集しましたが、質問を改善するだけでしたが、私は最後までバッチファイルで最後のコマンドを貼り付けました。 – Snickdx

答えて

0

zipjs.batで試してみてください:

@echo off 

for /r %%s in (*.zip) do (

    call zipjs.bat unzip -source "%%~fs" -destination "%%~dpns" -keep yes -force yes 
) 
+0

これは出力であり、そのサブフォルダは約34です。 ******バッチリフレクションがスタック制限を超過しています****** 再帰カウント= 261、スタック使用率= 90% ******バッチ処理が使用されていません****** ' – Snickdx

+0

@Snickdx - このエラーは、' CALL'コマンドの '261'ネストされた呼び出しがあると言います。 – npocmaka

+0

申し訳ありませんあなたの答えを誤解しているようですが、提供されたコードはバッチファイルに配置され、zipjs.batという名前が付けられていると思いましたが、それは実際のスクリプトへのリンクです。 – Snickdx

1

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" 
    ) 
関連する問題