Nie sądzę, aby w systemie Windows był wbudowany wiersz poleceń dla plików ZIP (innych niż compressw zestawie Server 2003 Resource Kit). Będziesz musiał skorzystać z usług strony trzeciej. Wszyscy kochają 7zip !
Połączyłem ten skrypt z kilku różnych źródeł, aby lepiej odpowiadać moim potrzebom. Skopiuj i wklej skrypt do pliku z rozszerzeniem „.vbs”. Skrypt został pierwotnie stworzony dla systemu Windows XP, ale działa również w systemie Windows 7 x64 Ultimate - nie ma gwarancji, że Windows zachowa różne obiekty Shell, których używa.
Ścieżka do skryptu, folder źródłowy, plik zip do utworzenia (dołącz .zip na końcu).
Nie kopiuje pustych folderów, więc bądź ostrożny.
Oto kod 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
Wygląda obiecująco, ale dostałem błąd „Wymagany obiekt: 'objApp.NameSpace (...)' w linii 16
pihentagy,
Mam ten sam problem. Powyższy kod nie działa lub wymaga dodatkowych elementów w systemie, o którym zapomniał wspomnieć.
Shaamaan
Wykorzystuje WScript (środowisko vbs) i kilka obiektów Shell. Wszystkie zostały domyślnie zainstalowane w systemie Windows XP (biznes?) I Win 7 Ultimate x64. Być może są już tam dla Win8?
WSkid
2
Możliwe jest uruchomienie skryptu PowerShell z BAT. Plik nietoperza otrzymuje ścieżkę do katalogu do spakowania i nazwę pliku zip jako parametry.
@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
Ale jaka byłaby zaleta tego podejścia? Dlaczego nie napisać skryptu PowerShell do stałego pliku i pozwolić mu zaakceptować parametry?
Seth
Wypróbowałem wszystkie inne rozwiązania. jest to jedyne bezpieczne rozwiązanie, które działa idealnie. Najważniejszą zaletą jest użycie natywnych poleceń PowerShell i brak konieczności tworzenia starego języka VBScript.
desmati
To działało dla mnie na starym korporacyjnym laptopie z Windows7 w 2019 roku.
simbo1905
1
Oto świetny link, który pokazuje, jak skompresować plik za pomocą rodzimych poleceń systemu Windows.
Przetestowałem to z katalogiem zawierającym wiele zagnieżdżonych plików i folderów i działało idealnie. Wystarczy postępować zgodnie z formatem wiersza poleceń.
Istnieje również sposób na rozpakowanie plików za pomocą wiersza polecenia, który również znalazłem. Jednym ze sposobów jest otwarcie okna eksploratora pokazującego zawartość spakowanego pliku. Niektóre z nich używają również Javy, która niekoniecznie jest natywna dla systemu Windows, ale jest tak powszechna, że prawie tak się wydaje.
Powinieneś dołączyć instrukcje do swojej odpowiedzi. Jeśli linki
przestaną
1
To stare pytanie, ale jego aktualność jest wciąż aktualna.
System Windows ma oczywiście własny algorytm kompresji wbudowany do korzystania z plików zip, ale naprawdę działa słabo w porównaniu z produktem open source 7zip, który można znaleźć tutaj http://www.7-zip.org/
Inni omawiali już różne metody korzystania z wbudowanych funkcji systemu Windows, moje rozwiązanie wymaga instalacji dodatkowego oprogramowania.
7Zip obsługuje szeroką gamę plików, w tym ZIP, RAR, CAB i ISO oraz własny format 7z.
Możesz wyświetlić pomoc wiersza poleceń: „C: \ Program Files \ 7-Zip \ 7z.exe” - pomoc
aby wykonać prosty dodatek do archiwum zip:
„C: \ Program Files \ 7-Zip \ 7z.exe” nazwa pliku. Zip c: \ path
Nie tego chciałem zrobić, ale teraz będzie to dla mnie skuteczne. To przydatna sztuczka.
bballdave025
0
Wyślę coś związanego z odpowiedzią WSkids, ponieważ niestety nie mogę użyć funkcji komentowania.
Korzystanie z metody CopyHere () w VBS wprowadza kilka problemów. Jednym z tych problemów jest to, że metoda natychmiast wraca, gdy proces kopiowania rozpoczyna się w tle, podczas gdy wiele wywołań CopyHere () będzie przeszkadzać sobie nawzajem, a ZIP nie zostanie poprawnie utworzony. W tym celu potrzebna jest pętla oczekiwania. Moja pętla oczekiwania opiera się na odpowiedzi na podobny problem opublikowanej tutaj .
Oto zaktualizowana wersja, która naprawia błąd „Wymagany obiekt” zgłoszony przez pihentagy . Jest to problem z timingiem, ponieważ nowo utworzony plik ZIP jest zawarty w kolekcji Items, gdy skrypt jest wykonywany na szybkich komputerach.
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
compress.exe
.Odpowiedzi:
Począwszy od PowerShell 5 (luty 2016 r.), Możesz używać „Compress-Archive”:
Lub:
http://msdn.microsoft.com/powershell/reference/5.0/microsoft.powershell.archive/compress-archive
źródło
Nie sądzę, aby w systemie Windows był wbudowany wiersz poleceń dla plików ZIP (innych niż
compress
w zestawie Server 2003 Resource Kit). Będziesz musiał skorzystać z usług strony trzeciej. Wszyscy kochają 7zip !źródło
Połączyłem ten skrypt z kilku różnych źródeł, aby lepiej odpowiadać moim potrzebom. Skopiuj i wklej skrypt do pliku z rozszerzeniem „.vbs”. Skrypt został pierwotnie stworzony dla systemu Windows XP, ale działa również w systemie Windows 7 x64 Ultimate - nie ma gwarancji, że Windows zachowa różne obiekty Shell, których używa.
Użycie: w polu uruchamiania lub w wierszu poleceń
Ścieżka do skryptu, folder źródłowy, plik zip do utworzenia (dołącz .zip na końcu).
Nie kopiuje pustych folderów, więc bądź ostrożny.
Oto kod VBS ---
źródło
Możliwe jest uruchomienie skryptu PowerShell z BAT. Plik nietoperza otrzymuje ścieżkę do katalogu do spakowania i nazwę pliku zip jako parametry.
źródło
Oto świetny link, który pokazuje, jak skompresować plik za pomocą rodzimych poleceń systemu Windows.
Czy możesz skompresować plik z wiersza polecenia, używając TYLKO wbudowanej funkcji systemu Windows do kompresowania plików?
Przetestowałem to z katalogiem zawierającym wiele zagnieżdżonych plików i folderów i działało idealnie. Wystarczy postępować zgodnie z formatem wiersza poleceń.
Istnieje również sposób na rozpakowanie plików za pomocą wiersza polecenia, który również znalazłem. Jednym ze sposobów jest otwarcie okna eksploratora pokazującego zawartość spakowanego pliku. Niektóre z nich używają również Javy, która niekoniecznie jest natywna dla systemu Windows, ale jest tak powszechna, że prawie tak się wydaje.
Czy system Windows 7 ma domyślnie zainstalowany program do rozpakowywania w wierszu polecenia?
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
źródło
To stare pytanie, ale jego aktualność jest wciąż aktualna.
System Windows ma oczywiście własny algorytm kompresji wbudowany do korzystania z plików zip, ale naprawdę działa słabo w porównaniu z produktem open source 7zip, który można znaleźć tutaj http://www.7-zip.org/
Inni omawiali już różne metody korzystania z wbudowanych funkcji systemu Windows, moje rozwiązanie wymaga instalacji dodatkowego oprogramowania.
7Zip obsługuje szeroką gamę plików, w tym ZIP, RAR, CAB i ISO oraz własny format 7z.
Możesz wyświetlić pomoc wiersza poleceń: „C: \ Program Files \ 7-Zip \ 7z.exe” - pomoc
aby wykonać prosty dodatek do archiwum zip:
„C: \ Program Files \ 7-Zip \ 7z.exe” nazwa pliku. Zip c: \ path
źródło
Oto kolejny pomysł z 4 różnych źródeł; nie moje pomysły, ale skompilowałem je, aby działały dla mnie
źródło
Wyobraź sobie, że chcesz skompresować ten sam folder, w którym jesteś w wierszu polecenia BEZ otwierania okna PowerShell:
źródło
Wyślę coś związanego z odpowiedzią WSkids, ponieważ niestety nie mogę użyć funkcji komentowania.
Korzystanie z metody CopyHere () w VBS wprowadza kilka problemów. Jednym z tych problemów jest to, że metoda natychmiast wraca, gdy proces kopiowania rozpoczyna się w tle, podczas gdy wiele wywołań CopyHere () będzie przeszkadzać sobie nawzajem, a ZIP nie zostanie poprawnie utworzony. W tym celu potrzebna jest pętla oczekiwania. Moja pętla oczekiwania opiera się na odpowiedzi na podobny problem opublikowanej tutaj .
Oto zaktualizowana wersja, która naprawia błąd „Wymagany obiekt” zgłoszony przez pihentagy . Jest to problem z timingiem, ponieważ nowo utworzony plik ZIP jest zawarty w kolekcji Items, gdy skrypt jest wykonywany na szybkich komputerach.
źródło
Oto moja próba podsumowania okien wbudowanych możliwości kompresji i dekompresji - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders -z-partią-f
z kilkoma podanymi rozwiązaniami, które powinny działać na prawie każdym komputerze z systemem Windows.
źródło