क्या कमांड लाइन में एक फ़ोल्डर से .zip फ़ाइल बनाना संभव है, मैं किसी तीसरे पक्ष के निष्पादन योग्य का उपयोग नहीं करना चाहता।
मैं कुछ ऐसा सोच रहा था जैसे 'फोल्डर को कंप्रेस करें' लेकिन मुझे नहीं पता कि यह कैसे करना है ...
क्या कमांड लाइन में एक फ़ोल्डर से .zip फ़ाइल बनाना संभव है, मैं किसी तीसरे पक्ष के निष्पादन योग्य का उपयोग नहीं करना चाहता।
मैं कुछ ऐसा सोच रहा था जैसे 'फोल्डर को कंप्रेस करें' लेकिन मुझे नहीं पता कि यह कैसे करना है ...
जवाबों:
पावरशेल 5 (फरवरी 2016) से शुरू होकर, आप "कम्प्रेशन-आर्काइव" का उपयोग कर सकते हैं:
Compress-Archive -Path input.txt -DestinationPath output.zip
या:
Compress-Archive input.txt output.zip
http://msdn.microsoft.com/powershell/reference/5.0/microsoft.powershell.archive/compress-archive
मैंने अपनी आवश्यकताओं के अनुरूप कई अलग-अलग स्रोतों से इस स्क्रिप्ट को जोड़ा है। एक्सटेंशन ".vbs" के साथ स्क्रिप्ट को फ़ाइल में कॉपी और पेस्ट करें। स्क्रिप्ट मूल रूप से विंडोज एक्सपी के लिए बनाई गई थी, लेकिन यह विंडोज 7 x64 अल्टीमेट में भी काम करती है - कोई गारंटी नहीं है कि विंडोज विभिन्न शेल ऑब्जेक्ट्स का उपयोग करता है या नहीं।
उपयोग: रन बॉक्स या कमांड लाइन में-
"C:\zipper.vbs" "C:\folderToZip\" "C:\mynewzip.zip"
पथ स्क्रिप्ट, स्रोत फ़ोल्डर, ज़िप फ़ाइल बनाने के लिए (अंत में ज़िप को शामिल करें)।
यह खाली फ़ोल्डरों की नकल नहीं करेगा इसलिए सावधान रहें।
यहाँ vbs कोड है ---
Set Args = Wscript.Arguments
source = Args(0)
target = Args(1)
' make sure source folder has \ at end
If Right(source, 1) <> "\" Then
source = source & "\"
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set zip = objFSO.OpenTextFile(target, 2, vbtrue)
' this is the header to designate a file as a zip
zip.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
zip.Close
Set zip = nothing
wscript.sleep 500
Set objApp = CreateObject( "Shell.Application" )
intSkipped = 0
' Loop over items within folder and use CopyHere to put them into the zip folder
For Each objItem in objApp.NameSpace( source ).Items
If objItem.IsFolder Then
Set objFolder = objFSO.GetFolder( objItem.Path )
' if this folder is empty, then skip it as it can't compress empty folders
If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then
intSkipped = intSkipped + 1
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Next
intSrcItems = objApp.NameSpace( source ).Items.Count
wscript.sleep 250
' delay until at least items at the top level are available
Do Until objApp.NameSpace( target ).Items.Count + intSkipped = intSrcItems
wscript.sleep 200
Loop
'cleanup
Set objItem = nothing
Set objFolder = nothing
Set objApp = nothing
Set objFSO = nothing
BAT से PowerShell स्क्रिप्ट को चलाना संभव है। चमगादड़ फ़ाइल को ज़िप किए जाने के लिए और पैरामीटर के रूप में फ़ाइल नाम ज़िप करने के लिए पथ प्राप्त होता है।
@echo off
setlocal
rem First parameter - path to dir to be zipped
rem Second parameter- zip file name
set sourceDir=%1
set zipFile=%2
rem Create PowerShell script
echo Write-Output 'Custom PowerShell profile in effect!' > %~dp0TempZipScript.ps1
echo Add-Type -A System.IO.Compression.FileSystem >> %~dp0TempZipScript.ps1
echo [IO.Compression.ZipFile]::CreateFromDirectory('%sourceDir%','%~dp0%zipFile%') >> %~dp0TempZipScript.ps1
rem Execute script with flag "-ExecutionPolicy Bypass" to get around ExecutionPolicy
PowerShell.exe -ExecutionPolicy Bypass -Command "& '%~dp0TempZipScript.ps1'"
del %~dp0TempZipScript.ps1
endlocal
यहां एक शानदार लिंक है जो दिखाता है कि विंडोज़ देशी कमांड्स का उपयोग करके किसी फ़ाइल को कैसे ज़िप किया जाए।
मैंने कई नेस्टेड फ़ाइलों और फ़ोल्डरों वाली निर्देशिका के साथ इसका परीक्षण किया और यह पूरी तरह से काम किया। बस कमांड लाइन के प्रारूप का पालन करें।
कमांड लाइन के माध्यम से फ़ाइलों को अनज़िप करने का एक तरीका भी है जो मुझे भी मिला। एक तरीका, बस एक एक्सप्लोरर विंडो खोलना दिखाता है कि ज़िप की गई फ़ाइल की सामग्री क्या है। इनमें से कुछ जावा का भी उपयोग करते हैं जो आवश्यक रूप से विंडोज़ के लिए मूल नहीं है लेकिन इतना आम है कि यह लगभग ऐसा लगता है।
क्या विंडोज 7 में डिफ़ॉल्ट रूप से स्थापित कमांड लाइन में अनज़िप है?
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
यह एक पुराना सवाल है, लेकिन यह प्रासंगिकता अभी भी चालू है।
विंडोज की निश्चित रूप से यह स्वयं की संपीड़न एल्गोरिथ्म है जो ज़िप फ़ाइलों का उपयोग करने के लिए बनाया गया है, लेकिन, यह वास्तव में खराब प्रदर्शन करता है जब 7zip ओपन सोर्स उत्पाद की तुलना में यहां पाया जाता है http://www.7-zip.org/
अन्य ने पहले से ही अंतर्निहित विंडोज़ कार्यों के उपयोग के लिए विभिन्न तरीकों पर चर्चा की है, मेरे समाधान के लिए अतिरिक्त सॉफ़्टवेयर स्थापित करने की आवश्यकता है।
7Zip फ़ाइलों की एक विस्तृत श्रृंखला का समर्थन करता है, जिसमें ZIP, RAR, CAB और ISO शामिल हैं और यह स्वयं 7z प्रारूप है।
आप कमांड लाइन की मदद देख सकते हैं: "C: \ Program Files \ 7-Zip \ 7z.exe" --help
ज़िप संग्रह के लिए एक सरल जोड़ने के लिए:
"C: \ Program Files \ 7-Zip \ 7z.exe" एक फ़ाइल नाम। ज़िप c: \ path
यहाँ एक और विचार है, 4 विभिन्न स्रोतों से; मेरे विचार नहीं, लेकिन मैंने उन्हें मेरे लिए काम करने के लिए संकलित किया
<!-- : Begin batch script
@each off
set sourceFolder="c:\test"
set destZip="%userprofile%\desktop\example.zip"
cscript //nologo "%~f0?.wsf" //job:exewsh %sourceFolder% %destZip%
exit /b
GOTO:EOF
----- Begin wsf script --->
<package><job id="exewsh"><script language="VBScript">
'Get command-line arguments.
Set objArgs = WScript.Arguments
InputFolder = objArgs(0)
ZipFile = objArgs(1)
'Create empty ZIP file.
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set objShell = CreateObject("Shell.Application")
Set source = objShell.NameSpace(InputFolder).Items
objShell.NameSpace(ZipFile).CopyHere(source)
'Required!
wScript.Sleep 2000
</script></job>
</package>
कल्पना करें कि आप उसी फ़ोल्डर को संपीड़ित करना चाहते हैं, जो आप एक पॉवरशेल विंडो खोलने के बिना कमांड प्रॉम्प्ट पर हैं:
powershell Compress-Archive . publish.zip
मैं WSkids से संबंधित कुछ उत्तर दूंगा क्योंकि मैं टिप्पणी समारोह का उपयोग नहीं कर सकता।
VBS में CopyHere () पद्धति का उपयोग करने से कई मुद्दों का परिचय होता है। इनमें से एक मुद्दा यह है कि कॉपी प्रक्रिया शुरू होने के तुरंत बाद यह विधि वापस आ जाती है, जबकि मल्टीपल कॉपीहेयर () कॉल एक दूसरे को बाधित करेंगे और ज़िप सही तरीके से नहीं बनाए जाएंगे। इसे ठीक करने के लिए एक प्रतीक्षा लूप की आवश्यकता है। मेरा प्रतीक्षा लूप यहां पोस्ट किए गए एक समान मुद्दे के उत्तर पर आधारित है ।
यहाँ एक अद्यतन संस्करण है जो pihentagy द्वारा रिपोर्ट की गई "ऑब्जेक्ट आवश्यक" त्रुटि को ठीक करता है । यह एक समय की समस्या है क्योंकि नई बनाई गई ज़िप फ़ाइल को आइटम संग्रह में शामिल किया जाता है जब स्क्रिप्ट को तेज मशीनों पर निष्पादित किया जाता है।
set Args = WScript.Arguments
source = Args(0)
' remove trailing slashes as we add slashes when needed later
while Right(source, 1) = "\"
source = Mid(source, 1, Len(source) - 1)
wend
target = Args(1)
' create empty ZIP file
set fso = CreateObject("Scripting.FileSystemObject")
set zip = fso.OpenTextFile(target, 2, vbtrue)
' write ZIP header, this ensures that Windows recognizes the file as "ZIP Folder"
zip.Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
zip.Close
set zip = nothing
set fso = nothing
' copy files to ZIP file
set app = CreateObject("Shell.Application")
set sourceFolderObj = app.NameSpace(source)
set targetFolderObj = app.NameSpace(target)
for each item in sourceFolderObj.Items
itemPath = source & "\" & item.Name
copyItem = false
' ZIP file is included in Items collection and is recognized as folder, thus skip it to avoid script errors
if itemPath <> target then
if item.IsFolder then
if item.GetFolder.Items().Count = 0 then
' folder is empty, skip it as empty folders can't be compressed
else
copyItem = true
end if
else
copyItem = true
end if
end if
if copyItem then
targetFolderObj.CopyHere item
' wait until the file appears in the ZIP file,
' this is needed because CopyHere() returns immediately after starting an asynchronous copy process
' (starting multiple asynchronous copy will not work as it causes error messages, an invalid ZIP file, ...)
while (targetFolderObj.ParseName(item.Name) is nothing)
WScript.Sleep 1
wend
end If
next
set targetFolderObj = nothing
set sourceFolderObj = nothing
set app = nothing
यहाँ संपीड़न और असम्बद्धता के लिए अंतर्निहित क्षमताओं की खिड़कियों को संक्षेप में प्रस्तुत करने का मेरा प्रयास है - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzopip-files-and-folders -साथ बैच-च
कुछ दिए गए समाधानों के साथ जो लगभग हर विंडोज़ मशीन पर काम करना चाहिए।
compress.exe
।