Di Windows anda dapat zip beberapa file dengan
klik kanan → Kirim ke → Compressed (zipped) folder
Dan unzip dengan mengklik ganda pada .zip
file dan ekstrak file.
Apakah ada cara untuk menerapkan kemampuan tersebut dari script (.bat) tanpa perlu menginstal perangkat lunak pihak ketiga?
Untuk memperluas Steven Sen's PowerShell solusi, anda dapat memasukkan ke file batch dengan memanggil powershell.exe seperti ini:
powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar'); }"
Sebagai Ivan Shilo mengatakan, ini tidak't bekerja dengan PowerShell 2, hal ini membutuhkan PowerShell 3 atau lebih besar dan .NET Framework 4.
Sebagai .NET 4.5, PowerShell dapat melakukan hal ini:
Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar')
Untuk dua baris terakhir, bar
dan foo
bisa diganti dengan nama yang anda inginkan folder untuk memiliki, atau apapun nama dari folder yang sudah ada sebelumnya. foo.zip
dalam kedua kasus bertindak sebagai file zip yang baik untuk menyimpan atau untuk unzip dari.
Jika anda memiliki Java diinstal, anda dapat kompres ke ZIP arsip dengan menggunakan jar
perintah:
jar -cMf targetArchive.zip sourceDirectory
c = Membuat file arsip baru.
M = Menentukan bahwa sebuah file manifest tidak harus ditambahkan ke dalam arsip.
f = Menunjukkan target nama file.
Kembali pada tahun 2013, itu tidak mungkin. Microsoft didn't memberikan eksekusi ini.
Lihat link ini untuk beberapa VBS cara untuk melakukan hal ini. https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows
Dari Windows 8 pada, .NET Framework 4.5 diinstal secara default, dengan [System.IO.Compression.ZipArchive](https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive(v=vs. 110).aspx) dan PowerShell yang tersedia, seseorang dapat menulis script untuk mencapai hal ini, lihat https://stackoverflow.com/a/26843122/71312
Dari Microsoft.PowerShell.Arsip
yang dapat anda gunakan:
E. g.:
result.zip
dari seluruh Test
folder:Kompres-Arsip -Jalan C:\Test -DestinationPath C:\result
result.zip
di tentukan Test
folder:Memperluas-Arsip -Jalan result.zip -DestinationPath C:\Test
Ini isn't persis ZIP, tapi satu-satunya cara untuk kompres file menggunakan Windows tools adalah:
makecab <source> <dest>.cab
Untuk dekompresi:
expand <source>.cab <dest>
Lanjutan contoh (dari ss64.com):
Create a self extracting archive containing movie.mov:
C:\> makecab movie.mov "temp.cab"
C:\> copy /b "%windir%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"
Informasi lebih lanjut: masalah, expand, makecab canggih menggunakan
Menggunakan 7-Zip:
Resleting: anda memiliki folder foo
, dan ingin zip ke myzip.zip
"C:\Program Files\7-Zip\7z.exe" a -r myzip.zip -w foo -mem=AES256
Unzip: anda ingin unzip (myzip.zip
) ke direktori saat ini (./
)
"C:\Program Files\7-Zip\7z.exe" x myzip.zip -o./ -y -r
I've telah mencari untuk menjawab tepat pertanyaan dan dari penelitian saya, DiryBoy's respon tampaknya akurat.
Saya menemukan compact.exe program kompres file tetapi tidak untuk membuat highly compressed file (atau file). Hal ini mirip dengan opsi yang anda dapatkan ketika mengklik kanan pada huruf drive atau partisi di Windows. Anda mendapatkan pilihan untuk melakukan pembersihan (menghapus file temp, dll) serta kompres file. File yang dikompresi masih dapat diakses tapi hanya dikompresi untuk membuat ruang pada drive yang rendah pada ruang.
Aku juga ditemukan compress.exe yang saya lakukan terjadi pada komputer saya. Ini isn't native pada kebanyakan mesin windows dan merupakan bagian dari 2003 resource kit. Itu tidak membuat file zip macam tapi itu benar-benar lebih mirip dengan file dari windows setup disk (memiliki garis bawah sebagai karakter terakhir dari ekstensi file atau nama). Dan extract.exe perintah ekstrak file tersebut.
Namun, mantra, jika hal itu dapat dilakukan secara native melalui GUI maka ada kemungkinan cara untuk melakukan itu melalui batch, .vbs, atau beberapa jenis lain dari script di dalam command line. Sejak windows telah memiliki 'kirim ke' pilihan untuk membuat file zip, aku tahu ada harus menjadi cara untuk melakukannya melalui baris perintah dan saya menemukan beberapa pilihan.
Berikut ini adalah link yang menunjukkan bagaimana untuk zip file menggunakan windows asli perintah.
Saya diuji dengan sebuah direktori yang berisi beberapa bersarang file dan folder dan itu bekerja dengan sempurna. Hanya mengikuti format dari baris perintah.
Ada juga cara untuk unzip file melalui command line yang saya temukan juga. Salah satu cara, hanya membawa buka jendela explorer yang menunjukkan apa isi dari file zip ini. Beberapa dari mereka juga menggunakan Java yang isn't tentu asli untuk windows, tetapi yang sangat umum yang hampir tampaknya begitu.
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
Anda dapat menggunakan VBScript script dibungkus dalam file BAT. Kode ini bekerja pada PATH relatif.
Ada isn't memerlukan alat pihak ketiga atau dependensi. Hanya mengatur SOURCEDIR
dan OUTPUTZIP
.
Filename: ZipUp.bat
echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs
' Create empty ZIP file.
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipup.vbs
echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs
echo ' Keep script waiting until compression is done
echo Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count >> _zipup.vbs
echo WScript.Sleep 200 >> _zipup.vbs
echo Loop >> _zipup.vbs
CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%
del _zipup.vbs
Contoh penggunaan
SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.zip
CALL ZipUp
Atau, anda dapat parametrize file ini dengan mengganti baris CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%
dengan CScript _zipup.vbs %1 %2
, yang dalam kasus ini dapat menjadi lebih mudah disebut dengan hanya menelepon CALL ZipUp C:\Source\Dir C:\Archive.zip
.
Ini adalah versi terbaru untuk jawaban yang disediakan oleh @PodTech.io
Versi ini memiliki semua vbs kode dengan benar lolos dalam batch file. It's juga dibuat menjadi sub-rutin, yang dapat disebut dengan satu baris dari mana saja di batch script:
:: === Main code:
call :ZipUp "C:\Some\Path" "C:\Archive.zip"
:: === SubRoutines:
:ZipUp
::Arguments: Source_folder, destination_zip
(
echo:Set fso = CreateObject^("Scripting.FileSystemObject"^)
echo:InputFolder = fso.GetAbsolutePathName^(WScript.Arguments.Item^(0^)^)
echo:ZipFile = fso.GetAbsolutePathName^(WScript.Arguments.Item^(1^)^)
echo:
echo:' Create empty ZIP file.
echo:CreateObject^("Scripting.FileSystemObject"^).CreateTextFile^(ZipFile, True^).Write "PK" ^& Chr^(5^) ^& Chr^(6^) ^& String^(18, vbNullChar^)
echo:
echo:Set objShell = CreateObject^("Shell.Application"^)
echo:Set source = objShell.NameSpace^(InputFolder^).Items
echo:objShell.NameSpace^(ZipFile^).CopyHere^(source^)
echo:
echo:' Keep script waiting until compression is done
echo:Do Until objShell.NameSpace^( ZipFile ^).Items.Count = objShell.NameSpace^( InputFolder ^).Items.Count
echo: WScript.Sleep 200
echo:Loop
)>_zipup.vbs
CScript //Nologo _zipup.vbs "%~1" "%~2"
del _zipup.vbs
goto :eof
Jika anda perlu untuk melakukan hal ini sebagai bagian dari script maka cara terbaik adalah dengan menggunakan Java. Dengan asumsi direktori bin yang ada di jalan anda (dalam kebanyakan kasus), anda dapat menggunakan command line:
jar xf test.zip
Jika Java tidak di jalan anda, referensi langsung:
C:\Java\jdk1.6.0_03\bin>jar xf test.zip
Open source adalah teman anda :-)
Berikut ini adalah unzip: http://gnuwin32.sourceforge.net/packages/unzip.htm
Ada ZIP perintah ini: http://gnuwin32.sourceforge.net/packages/zip.htm
Yang biner download sudah cukup.
Saya punya masalah dengan semua solusi ini. Mereka're bukan yang sama, dan mereka semua membuat file yang memiliki ukuran sedikit perbedaan dibandingkan dengan RMB --> kirim ke --> compressed (zipped) folder
ketika dibuat dari sumber yang sama folder. Terdekat size-perbedaan yang saya miliki adalah 300 KB perbedaan (script > manual), dilakukan dengan:
powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip
(Pemberitahuan -CompressionLevel. Ada tiga kemungkinan nilai: Tercepat, NoCompression & Optimal, (Default: Optimal))
Saya ingin membuat .bat file yang secara otomatis harus kompres plugin WordPress folder saya'm bekerja pada, menjadi .arsip zip, jadi saya dapat meng-upload ke situs WordPress dan menguji plugin.
Tapi untuk beberapa alasan itu doesn't bekerja dengan semua ini otomatis kompresi, tetapi tidak bekerja dengan manual RMB kompresi, penyihir saya menemukan benar-benar aneh.
Dan script yang dihasilkan .file zip benar-benar istirahat plugin WordPress ke titik di mana mereka dapat't diaktifkan, dan mereka juga tidak dapat dihapus dari dalam WordPress. Saya SSH ke "kembali sisi" server dan menghapus upload file plugin sendiri, secara manual. Sedangkan secara manual RMB-file yang dihasilkan bekerja dengan normal.
Anda mengatakan anda're mencoba untuk melakukan hal ini tanpa perangkat lunak pihak ketiga. I'm tidak yakin jika anda'd pertimbangkan .NET "pihak ketiga" perangkat lunak.
Tapi anda dapat membuat anda sendiri utilitas baris perintah di .NET. Seharusnya't membutuhkan lebih dari beberapa baris kode.
Anda dapat mengekstrak zip atau native file terkompresi Windows dengan menggunakan Expand perintah, misalnya
expand MyFile.zip myFile
Untuk zip file:
C:\> zip -9 -m -o file.dat.zip file.dat