Menggunakan file batch untuk zip file sebagai file zip individual

10

Jadi saya mencoba menggunakan 7zip dalam file batch untuk mengambil file dalam folder dan zip sebagai file individual. Jadi file pertama mendapatkan arsip zip sendiri, dan selanjutnya dan seterusnya. Saya sudah mencari di internet dan mencoba banyak kode yang berbeda. Sejauh ini saya hanya berhasil mengatur zip mereka sebagai file zip tunggal dan itu output ke desktop saya.

Sayangnya saya kehilangan kode yang melakukan itu, dan sekarang saya terjebak dengan ini yang sepertinya tidak melakukan apa-apa.

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

Saya ingin setiap file memiliki arsip zip sendiri, dan untuk arsip zip berbagi nama file, minus ekstensi tentu saja.

Setiap bantuan sangat dihargai.

Mike Van Dunk
sumber
Juga jika ada cara yang lebih mudah untuk melakukan ini menggunakan fitur zip builtin pada Windows 10 yang juga akan baik-baik saja.
Mike Van Dunk

Jawaban:

4

Saya ingin setiap file memiliki arsip zip sendiri, dan untuk arsip zip berbagi nama file, minus ekstensi tentu saja.

Skrip Batch

(Tetapkan jalur folder eksplisit penuh sumber dan tujuan di bagian atas lalu jalankan sesuai kebutuhan. Sumbernya adalah tempat file ada yang ingin Anda zip dan tujuan adalah tempat Anda ingin zip itu.)

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

Garis komando

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.zip" "C:\Folder\Source\%~NXF"

Sumber Daya Lebih Lanjut

Pimp Juice
sumber
4

Script asli Anda melakukan hal berikut, baris demi baris:

@echo on

Memberitahu prompt perintah untuk mencetak kembali setiap perintah dalam file batch sebelum menjalankannya. Ini hanya agar Anda dapat "melihat" apa yang sebenarnya dilakukan sebelum melakukannya.

cd "C:\Users\MVD21\Desktop\test"

C menggantung D irectory ke apa yang saya harap adalah jalan di mana Anda ingin zip semua file.

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

Parameter di INsini adalah (C:\Users\MVD21\Desktop\test). Ini akan menyebabkan loop "tubuh" (tindakan di belakang kata kunci DO) dieksekusi tepat sekali , dengan %iparameter yang menetapkan nilainya C:\Users\MVD21\Desktop\test. Tidak mengherankan jika ini tidak sesuai keinginan Anda! Sepertinya ini akan zip seluruh direktori menjadi file .7z tunggal.

Jika tidak melakukan apa - apa , itu mungkin karena tidak dapat menemukan jalan 7z.exe. Jika file itu tidak ada di direktori saat ini ( testdirektori yang disebutkan di atas), maka itu harus berada di PATH(dalam %PATH%variabel lingkungan; coba echo %PATH%di shell untuk melihat apa yang diatur untuk saat ini). Kalau tidak, Anda harus menyalin 7z.exeke direktori saat ini atau menentukan jalur absolut ke tempat ia berada (seperti, misalnya, "C:\Program Files\7-zip\7z.exe" ...).

pause

Ketika skrip selesai, kata kunci ini hanya memberi tahu shell untuk menunggu Anda menekan enter atau menutup prompt perintah alih-alih keluar dengan segera.


Saat Anda sedang membuat skrip batch (atau, memang, hal lain yang berhubungan dengan kode), Anda harus berhenti memperlakukan seluruh skrip sebagai copy-paste monolitik yang tidak Anda (usahakan untuk) pahami, dan alih-alih hancurkan Anda masalah menjadi sub-bagian yang dapat Anda pahami secara terpisah, lalu hubungkan bersama. Ini akan memungkinkan Anda untuk memecahkan masalah secara mandiri dan membuat solusi alih-alih meminta orang lain untuk melakukan semua pekerjaan Anda untuk Anda. Saya sangat merekomendasikannya.

Dalam kasus Anda, Anda memiliki sub-komponen masalah berikut ini:

  1. Iterate over (loop through) setiap file yang terkandung dalam direktori yang diberikan.
  2. Untuk setiap file yang diberikan, masukkan ke file .7z dengan menjalankan 7zutilitas.

Peluang seseorang untuk memiliki jawaban di luar sana yang telah memecahkan kebutuhan spesifik Anda kurang dari peluang untuk dapat menemukan bagian yang lebih umum secara individual.

Pertanyaan ini, 'Bagaimana melakukan sesuatu untuk setiap file dalam direktori dalam skrip batch' memecahkan setengah masalah Anda.

Inti dari jawabannya adalah Anda baru mulai dengan bagian ini dari jawaban StackOverflow:

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

dan mengubah bagian mana itu melakukan sesuatu (yang echo %%f) untuk melakukan apa yang ingin Anda lakukan . Saya tahu bahwa Anda perlu mengubah bagian itu, karena saya telah menganalisis teks skrip dan memahami arti setiap karakter dan parameter, sehingga saya dapat mempertimbangkan di mana saya ingin memasukkan kode saya sendiri.

Inilah beberapa "kode udara" (belum diuji!):

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

The @echo ondan pausepernyataan di atas adalah praktek yang baik, sehingga Anda dapat meninggalkan mereka di. Dan Anda mungkin ingin menjaga cdpernyataan juga, jika file Anda berada di jalan itu.

Jadi apa yang meninggalkan kita?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

Jika Anda membalas dengan "Tidak berhasil!", SAYA TIDAK AKAN membantu Anda. Jika Anda mencoba ini dan itu tidak berhasil, Anda HARUS memberi tahu saya di komentar informasi berikut:

  • Apa pesan kesalahan yang tepat yang Anda dapatkan di prompt perintah ketika Anda menjalankan perintah ini atau memasukkannya ke dalam file batch dan menjalankannya? Jangan menyingkat; salin dan tempel output secara langsung (letakkan di http://pastebin.com jika banyak).
  • Menurut Anda, apa pesan kesalahan yang memberi tahu Anda bahwa masalahnya adalah?
  • Di mana instalasi 7-zip Anda berada (path file)?
  • Apakah lokasi file instalasi 7-zip Anda termasuk dalam isi PATHvariabel lingkungan? (memeriksa ini, seperti disebutkan di atas, dengan echo %PATH%dalam cmdprompt.)
allquixotic
sumber
Saya tidak berpikir ini berfungsi karena saya telah menginstal 7zip di drive lain? Tampaknya berfungsi jika saya melakukan cd "Lokasi 7zip" seperti pada jawaban aslinya. Tentu saja itu hanya berfungsi "kadang-kadang". Itu bekerja sampai saya meletakkan pernyataan gema lain di bawahnya dan sekarang tidak. Dan ya saya mencoba memahami lebih lanjut tentang file batch. Saya telah mencoba untuk menemukan glosarium dari perintah batch atau yang tidak untuk dipelajari sehingga saya benar-benar memahaminya. Percayalah, aku lebih suka mengerti DAN membuatnya bekerja daripada hanya bekerja.
Mike Van Dunk
Saya mencoba solusi Anda dan saya tidak bisa memberi tahu Anda apa outputnya karena file batch tidak berjalan sama sekali. Ini terbuka sebentar dengan jendela cmd hanya berkedip dan kemudian tutup lagi. Ya, saya memiliki jeda di sana. Saya telah menginstal 7zip pada drive lokal saya dan drive internal sekunder, tetapi tampaknya tidak menjadi bagian dari lingkungan path
Mike Van Dunk
Saya benar-benar ingin memahami tetapi mencari google tidak banyak membantu. Sebagai contoh, saya tidak tahu apa itu perintah atau parameter "'dir / b" atau apa yang dilakukannya. Saya tahu dir jelas adalah direktori tetapi saya tidak tahu apa / b. Yang saya inginkan adalah seseorang menjelaskan parameter apa yang dilakukan sehingga saya dapat lebih memahami. Atau jika seseorang memiliki tautan ke situs tempat mereka membahas hal semacam ini, itu akan sangat membantu. Saya googled 'dir / b dalam file batch dan tidak bisa menemukan apa pun. Saya pikir / b ada hubungannya dengan nama file tetapi saya tidak yakin.
Mike Van Dunk