2010-10-20 07:50:38 +0000 2010-10-20 07:50:38 +0000
63
63

.zip-Ordner von der Kommandozeile aus erstellen - (Windows)

Ist es möglich, eine .zip-Datei aus einem Ordner in der Kommandozeile zu erstellen, ich möchte keine ausführbare Datei eines Drittanbieters verwenden.

Ich dachte an etwas wie ‘an komprimierten Ordner senden’, aber ich weiß nicht, wie das geht…

Antworten (10)

41
41
41
2015-04-06 21:26:20 +0000

Beginnend mit PowerShell 5 (Februar 2016) können Sie “Compress-Archive” verwenden:

Compress-Archive -Path input.txt -DestinationPath output.zip

Oder:

Compress-Archive input.txt output.zip

input.txt hier könnte auch ein Verzeichnis https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.archive/compress-archive?view=powershell-5.1

7
7
7
2010-10-20 07:57:39 +0000

Ich glaube nicht, dass in Windows eine Befehlszeile für ZIP-Dateien eingebaut ist (anders als compress im Server 2003 Resource Kit). Sie müssten einen Drittanbieter verwenden. Jeder liebt 7zip !

6
6
6
2010-10-20 08:32:39 +0000

Ich habe dieses Skript aus mehreren verschiedenen Quellen kombiniert, um meinen Bedürfnissen besser gerecht zu werden. Kopieren Sie das Skript und fügen Sie es in eine Datei mit der Erweiterung “.vbs” ein. Das Skript wurde ursprünglich für Windows XP erstellt, aber es funktioniert auch in Windows 7 x64 Ultimate - es gibt keine Garantie dafür, daß Windows die verschiedenen Shell-Objekte, die es verwendet, in der Nähe behält.

Verwendung: in der Run-Box oder Befehlszeile put-

"C:\zipper.vbs" "C:\folderToZip\" "C:\mynewzip.zip"

Pfad zum Skript, Quellordner, zu erstellende Zip-Datei (schließen Sie .zip am Ende ein).

Es kopiert keine leeren Ordner, also seien Sie vorsichtig.

Hier ist der vbs-Code —

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
4
4
4
2018-07-04 11:29:13 +0000

Stellen Sie sich vor, Sie möchten denselben Ordner komprimieren, in dem Sie sich in der Eingabeaufforderung befinden, OHNE ein Power-Shell-Fenster zu öffnen:

powershell Compress-Archive . publish.zip
2
2
2
2018-01-18 22:50:18 +0000

Hier ist eine weitere Idee, aus 4 verschiedenen Quellen; nicht meine Ideen, aber ich habe sie zusammengestellt, damit sie für mich funktioniert

<!-- : 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>
2
2
2
2016-11-30 12:19:08 +0000

Es ist möglich, PowerShell-Skript von BAT aus auszuführen. Die Bat-Datei erhält den Pfad zum zu zippenden Verzeichnis und den Namen der Zip-Datei als Parameter.

@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
1
1
1
2013-11-15 04:21:10 +0000

Hier ist ein großartiger Link, der zeigt, wie man eine Datei mit Hilfe von Windows-eigenen Befehlen komprimiert. Können Sie eine Datei von der Eingabeaufforderung aus komprimieren, indem Sie NUR die in Windows eingebaute Fähigkeit zum Komprimieren von Dateien nutzen?

Ich habe es mit einem Verzeichnis getestet, das mehrere verschachtelte Dateien und Ordner enthält, und es funktionierte perfekt. Folgen Sie einfach dem Format der Befehlszeile.

Es gibt auch eine Möglichkeit, die Dateien über die Befehlszeile zu entpacken, die ich ebenfalls gefunden habe. Eine Möglichkeit besteht darin, einfach ein Explorer-Fenster zu öffnen, das den Inhalt der gezippten Datei anzeigt. Einige davon verwenden auch Java, das nicht unbedingt Windows-spezifisch ist, aber so verbreitet ist, dass es fast so aussieht. Ist bei Windows 7 das Entpacken über die Befehlszeile standardmäßig installiert? https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line

1
1
1
2017-08-16 06:41:05 +0000

Dies ist eine alte Frage, aber ihre Relevanz ist immer noch aktuell.

Windows hat natürlich seinen eigenen Kompressionsalgorithmus für die Verwendung von Zip-Dateien eingebaut, aber er schneidet wirklich schlecht ab, wenn man ihn mit dem Open-Source-Produkt 7zip vergleicht, das hier zu finden ist http://www.7- zip.org/

Andere haben bereits verschiedene Methoden zur Nutzung der eingebauten Windows-Funktionen diskutiert, meine Lösung erfordert die Installation der zusätzlichen Software.

7Zip unterstützt eine Vielzahl von Dateien, einschließlich ZIP, RAR, CAB und ISO und sein eigenes 7z-Format.

Sie können die Kommandozeilenhilfe einsehen: “C:\Programmdateien\7-Zip\7z.exe” – hilft

beim einfachen Hinzufügen zum ZIP-Archiv:

“C:\Programmdateien\7-Zip\7z.exe” ein Dateiname.zip c:\Pfad

1
1
1
2015-01-07 14:22:03 +0000

Ich werde etwas im Zusammenhang mit WSkids antworten, da ich die Kommentarfunktion leider nicht verwenden kann.

Die Verwendung der CopyHere()-Methode in VBS führt zu verschiedenen Problemen. Eines dieser Probleme besteht darin, dass die Methode sofort zurückkehrt, während der Kopiervorgang im Hintergrund startet, während mehrere CopyHere()-Aufrufe sich gegenseitig stören und die ZIP-Datei nicht korrekt erstellt wird. Hier ist eine Warteschleife erforderlich, um dies zu beheben. Meine Warteschleife basiert auf einer Antwort auf ein ähnliches Problem, die hier .

Hier ist eine aktualisierte Version, die den von pihentagy gemeldeten Fehler “Objekt erforderlich” behebt. Es handelt sich um ein Zeitproblem, da die neu erstellte ZIP-Datei in die Items-Sammlung aufgenommen wird, wenn das Skript auf schnellen Maschinen ausgeführt wird.

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
1
1
1
2015-01-22 12:27:53 +0000

Hier ist mein Versuch, die eingebauten Fähigkeiten Fenster für Komprimierung und Dekomprimierung - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders-with-batch-f

mit ein paar vorgegebenen Lösungen zusammenzufassen, die auf fast jeder Windows-Maschine funktionieren sollten.