Bagaimana cara mengekstrak semua arsip di subdirektori folder ini?

18

Bagaimana cara mengekstrak banyak arsip di dalam subdirektori dalam folder, mengeluarkan hasilnya kembali ke folder di mana arsip berada.

HopelessN00b
sumber

Jawaban:

22

Pertama, instal 7-zip .

Buat batfile di root direktori yang berisi banyak subdirektori dengan arsip di dalamnya. Kemudian rekatkan yang berikut ini di:

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
)

Luncurkan kelelawar, dan semua rar / ritsleting akan diekstraksi ke dalam folder tempat mereka berada.

Bagaimana cara kerjanya?

UNTUK / D / r %% F dalam ("*") DO (

Untuk loop ke loop melalui semua folder di direktori saat ini, dan letakkan path ke dalam variabel %%F.

pushd% CD%

Masukkan direktori saat ini bahwa kita berada dalam memori.

cd %% F

Atur folder dari variabel %%Fsebagai direktori saat ini.

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

Untuk semua file rardan zipdi folder saat ini, lakukan:

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

Jalankan 7-zip pada file. Harga diperlukan sekitar %%Xkarena beberapa nama file memiliki spasi di dalamnya.

popd

Kembali ke direktori sebelumnya yang sebelumnya kita simpan di memori.

Semoga ini bermanfaat bagi seseorang.

anon
sumber
3

Saya punya masalah menjalankan skrip dari Windows Vista. Ketika saya menjalankan kode, tidak ada yang terjadi. Saya harus menjadi administrator untuk dapat menjalankan skrip. Ketika saya mengklik kanan pada file .bat dan "jalankan sebagai administrator" itu tidak berfungsi karena beberapa alasan dimulai pada folder system32 (jika saya ingat dengan benar). Untuk mengatasi ini cukup gunakan variabel Lingkungan Windows (dijelaskan di sini: Variabel Lingkungan Windows )% ~ dp0 untuk beralih kembali ke direktori tempat skrip dijalankan.

@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
)

Pastikan tidak ada file * .rar atau * .zip pada tingkat yang sama dengan skrip. Mereka harus turun satu tingkat.

Saya harap komentar ini membantu seseorang.

Daniel P
sumber
Ini bekerja dengan baik untuk saya. Saya harus mengubah jalur ke "C: \ Program Files (x86)" dari "C: \ Program Files" karena saya menjalankan 64-bit Win 7.
Contango
1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Mulai pencarian rekursif di direktori saat ini, menemukan semua file yang berakhiran .zip, lalu pipa itu menjadi loop. Untuk setiap file yang ditemukannya, ia menjalankan perintah unzip pada file tersebut dengan output di-shunt ke direktori file.

Curtis Tasker
sumber
1

Namun, jawaban di atas berfungsi jika Anda menjalankan Windows 64-bitdan 7-Zip 32-bit, jalur yang benar adalah C:\Program Files (x86)\7-Zipuntuk 7-Zip. Di bawah ini adalah skrip yang berfungsi untuk saya.

@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
)
Ryan
sumber
Namun, jika Anda memiliki versi 7-bit 64-bit, jalur yang benar adalah: "C: \ Program Files \ 7-zip \ 7z.exe" sebagaimana dinyatakan dalam jawaban asli.
Rohn Adams