Ini adalah pengemas zip internal dari Total Commander:
Namun saya ingin menggunakan paket 7zip saya. Ketika saya memilih 5 file, saya mendapatkan 5 arsip .zip terpisah untuk setiap file yang dipilih. Bagaimana saya melakukannya di 7zip?
Ini adalah pengemas zip internal dari Total Commander:
Namun saya ingin menggunakan paket 7zip saya. Ketika saya memilih 5 file, saya mendapatkan 5 arsip .zip terpisah untuk setiap file yang dipilih. Bagaimana saya melakukannya di 7zip?
Jawaban:
Saya tidak yakin Anda bisa melakukan apa yang Anda sarankan menggunakan antarmuka pengguna grafis, tetapi Anda tentu bisa dari baris perintah:
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"
Anda perlu mengubah direktori ( cd
perintah) ke F:\Downloads
direktori terlebih dahulu, atau direktori apa pun yang Anda inginkan untuk melakukan kompresi massal. Juga, cukup mudah untuk mengganti * .exe atau ekstensi apa pun yang ingin Anda filter untuk hanya mengompresi dokumen-dokumen itu.
Dan cincin dekoder rahasia:
%i
adalah variabel yang menyimpan nama file untuk setiap langkah dalam loop(*.*)
adalah kriteria pemilihan, bisa dengan mudah * .exe atau serupa7z.exe
adalah versi baris perintah 7-Zip%~ni
- ini memperluas variabel% i menjadi hanya nama file - tanpa ekstensiJika Anda hanya ingin menambahkan folder untuk direktori yang diberikan, perintahnya sedikit lebih rumit karena secara default FOR hanya bekerja dengan file. Kami perlu memberinya beberapa informasi tambahan:
FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"
Ini bekerja karena beberapa bagian dari apa yang tampak seperti sulap:
/F
memberitahu FOR untuk mengulangi nilai yang diperluas di ()usebackq
memberitahu FOR bahwa saya akan memberikan perintah dan menggunakan output untuk beralihdelims=?
memberitahu FOR bahwa saya ingin memecah token di ?
- karakter ilegal dalam nama file dan direktori. Saya hanya ingin satu token./B
dalam DIR
adalah untuk format yang telanjang - hanya nama/A:D
dalam DIR
adalah untuk membatasi hasil dengan atribut, D adalah untuk direktoriJika Anda ingin merangkum ini di dalam file batch, satu-satunya perubahan yang perlu Anda lakukan adalah dengan meloloskan diri dari variabel% i:
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
Saya suka jawaban Goyuix. Namun, jika Anda menggunakan Windows 7 (atau memasang Power Shell) dan juga menggunakan versi baris perintah 7-zip, 7za.exe, maka Anda dapat menjalankan perintah ini:
dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Anda juga dapat mengubah "dir" menjadi "dir * .exe" untuk hanya memilih file yang dapat dieksekusi.
Satu hal yang baik tentang Power Shell adalah bahwa Anda bekerja dengan objek, bukan string. Jadi Anda bisa menjadi sangat spesifik jika Anda mau. Sebagai contoh:
dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Ini hanya akan mencakup file yang:
EDIT Jika Anda ingin file zip bukan file 7-zip, gunakan InfoZip's zip.exe sebagai gantinya.
7z a -tzip archive.zip *.exe
Anda dapat mengunduh dan menginstal plugin 7zip untuk Total Commander dari http://www.ghisler.com/plugins.htm Setelah Anda melakukannya di sisi kanan jendela dari tangkapan layar Anda, akan ada pilihan lain untuk kompresi 7zip. Dengan opsi itu Anda dapat mencapai apa yang Anda minta.
Saya baru saja bekerja pada masalah ini dan salah satu masalah yang saya temukan adalah duplikasi nama folder dalam arsip, yaitu ketika mengompresi folder yang disebut "foo" arsip yang mengandung .\foo\fighters.txt
diproduksi bukan hanya satu yang mengandung fighters.txt
.
Jawabannya, oleh karena itu pergi ke direktori yang sedang diproses dan memiliki arsip muncul di direktori (root) sebelumnya, kemudian kembali ke direktori itu untuk memproses folder berikutnya.
Juga penting untuk memiliki 7ZIP mengabaikan file ZIP dan CMD yang ada dalam direktori root untuk mencegah mereka berakhir dalam arsip, karenanya argumen -x!*.zip
dan -x!*.cmd
pengecualian.
Script ini juga akan mempertahankan struktur folder rekursif.
@echo off
REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal
if exist *.zip goto zip_exist
for /d %%X in (*) do (
cls
cd /D %%X
"e:\Program Files\7-Zip\7z.exe" a -r -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
cd ..
)
goto end
:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.
:end
pause
Kode di atas harus disalin ke file batch seperti "compress_dirs.cmd" dan dijalankan sebagai admin dari direktori yang berisi folder yang ingin Anda kompres.
Semoga ini membantu.
Jika Anda perlu menjaga struktur folder, dan menyimpan setiap file dalam strukturnya sendiri, coba ini:
Simpan perintah ini dalam file dengan ekstensi .bat dan letakkan di folder yang Anda perlu zip:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
catatan:
-sdel: Menghapus file asli (opsional, jika Anda hanya ingin menyimpan file yang dikompresi)