Я не думаю, что есть командная строка для ZIP-файлов, встроенных в Windows (кроме compressServer 2003 Resource Kit). Вы должны будете использовать третье лицо. Все любят 7zip !
Я объединил этот скрипт из нескольких разных источников, чтобы лучше удовлетворить мои потребности. Скопируйте и вставьте скрипт в файл с расширением «.vbs». Первоначально сценарий был создан для Windows XP, но он также работает в Windows 7 x64 Ultimate - нет никакой гарантии, что Windows сохранит различные объекты Shell, которые он использует.
Использование: в поле запуска или в командной строке введите
Путь к сценарию, исходная папка, создаваемый zip-файл (включая .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
Выглядит многообещающе, но я получил сообщение "Требуется объект: 'objApp.NameSpace (...)" в строке 16
pihentagy
У меня точно такая же проблема. Приведенный выше код не работает или нуждается в некоторых дополнительных элементах системы, о которых забыл упомянуть автор.
Shaamaan
Он использует WScript (среда vbs) и несколько объектов Shell. Все они были установлены по умолчанию в Windows XP (business?) И Win 7 Ultimate x64. Возможно, они дольше существуют для Win8?
WSkid
2
Возможно запустить скрипт PowerShell из BAT. Bat-файл получает путь к dir, который будет заархивирован, и имя zip-файла в качестве параметров.
@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
Но в чем преимущество этого подхода? Почему бы просто не написать сценарий PowerShell в фиксированный файл и позволить ему принимать параметры?
Сет
Я перепробовал все другие решения. это единственное отказоустойчивое решение, которое работает идеально. Наиболее важным преимуществом является использование собственных команд powershell, и нет необходимости создавать устаревший VBScript.
Десмати
Это сработало для меня на старом корпоративном ноутбуке с Windows7 в 2019 году.
simbo1905
1
Вот отличная ссылка, которая показывает, как архивировать файл с помощью собственных команд Windows.
Я протестировал его с каталогом, содержащим несколько вложенных файлов и папок, и он работал отлично. Просто следуйте формату командной строки.
Есть также способ разархивировать файлы через командную строку, которую я также нашел. Один из способов - просто открыть окно обозревателя, в котором показано содержимое сжатого файла. Некоторые из них также используют Java, который не обязательно является родным для окон, но настолько распространен, что кажется почти так.
Вы должны включить инструкции в свой ответ. Если ссылки устареют, ваш ответ будет бесполезным ...
MoonSire
1
Это старый вопрос, но его актуальность все еще актуальна.
Windows, конечно, имеет свой собственный алгоритм сжатия, встроенный для использования zip-файлов, но он действительно плохо работает по сравнению с продуктом с открытым исходным кодом 7zip, который можно найти здесь http://www.7-zip.org/
Другие уже обсуждали различные способы использования встроенных функций Windows, мое решение требует установки дополнительного программного обеспечения.
7Zip поддерживает широкий спектр файлов, включая ZIP, RAR, CAB и ISO, а также собственный формат 7z.
Вы можете просмотреть справку командной строки: «C: \ Program Files \ 7-Zip \ 7z.exe» --help
Это было не то, что я намеревался сделать, но теперь это будет работать для меня. Это удобный трюк, чтобы знать.
bballdave025
0
Я опубликую что-то, связанное с ответом WSkids, к сожалению, я не могу использовать функцию комментария.
Использование метода CopyHere () в VBS создает несколько проблем. Одна из этих проблем заключается в том, что метод немедленно возвращается, в то время как процесс копирования начинается в фоновом режиме, в то время как несколько вызовов CopyHere () будут мешать друг другу, и ZIP не будет создан правильно. Цикл ожидания здесь необходим, чтобы это исправить. Мой цикл ожидания основан на ответе на похожую проблему, опубликованную здесь .
Вот обновленная версия, которая исправляет ошибку «Требуется объект», сообщенную pihentagy . Это временная проблема, поскольку вновь созданный ZIP-файл включается в коллекцию Items, когда скрипт выполняется на быстрых машинах.
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
.Ответы:
Начиная с PowerShell 5 (февраль 2016 г.), вы можете использовать «Compress-Archive»:
Или же:
http://msdn.microsoft.com/powershell/reference/5.0/microsoft.powershell.archive/compress-archive
источник
Я не думаю, что есть командная строка для ZIP-файлов, встроенных в Windows (кроме
compress
Server 2003 Resource Kit). Вы должны будете использовать третье лицо. Все любят 7zip !источник
Я объединил этот скрипт из нескольких разных источников, чтобы лучше удовлетворить мои потребности. Скопируйте и вставьте скрипт в файл с расширением «.vbs». Первоначально сценарий был создан для Windows XP, но он также работает в Windows 7 x64 Ultimate - нет никакой гарантии, что Windows сохранит различные объекты Shell, которые он использует.
Использование: в поле запуска или в командной строке введите
Путь к сценарию, исходная папка, создаваемый zip-файл (включая .zip в конце).
Он не будет копировать пустые папки, поэтому будьте осторожны.
Вот код VBS ---
источник
Возможно запустить скрипт PowerShell из BAT. Bat-файл получает путь к dir, который будет заархивирован, и имя zip-файла в качестве параметров.
источник
Вот отличная ссылка, которая показывает, как архивировать файл с помощью собственных команд Windows.
Вы можете заархивировать файл из командной строки, используя встроенную возможность ТОЛЬКО в Windows для архивирования файлов?
Я протестировал его с каталогом, содержащим несколько вложенных файлов и папок, и он работал отлично. Просто следуйте формату командной строки.
Есть также способ разархивировать файлы через командную строку, которую я также нашел. Один из способов - просто открыть окно обозревателя, в котором показано содержимое сжатого файла. Некоторые из них также используют Java, который не обязательно является родным для окон, но настолько распространен, что кажется почти так.
Windows 7 имеет распакованный файл в командной строке, установленный по умолчанию?
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
источник
Это старый вопрос, но его актуальность все еще актуальна.
Windows, конечно, имеет свой собственный алгоритм сжатия, встроенный для использования zip-файлов, но он действительно плохо работает по сравнению с продуктом с открытым исходным кодом 7zip, который можно найти здесь http://www.7-zip.org/
Другие уже обсуждали различные способы использования встроенных функций Windows, мое решение требует установки дополнительного программного обеспечения.
7Zip поддерживает широкий спектр файлов, включая ZIP, RAR, CAB и ISO, а также собственный формат 7z.
Вы можете просмотреть справку командной строки: «C: \ Program Files \ 7-Zip \ 7z.exe» --help
выполнить простое добавление в zip-архив:
"C: \ Program Files \ 7-Zip \ 7z.exe" имя_файла.zip c: \ path
источник
Вот еще одна идея, из 4 разных источников; не мои идеи, но я собрал их, чтобы они работали на меня
источник
Представьте, что вы хотите сжать ту же папку, что и в командной строке, БЕЗ открытия окна powershell:
источник
Я опубликую что-то, связанное с ответом WSkids, к сожалению, я не могу использовать функцию комментария.
Использование метода CopyHere () в VBS создает несколько проблем. Одна из этих проблем заключается в том, что метод немедленно возвращается, в то время как процесс копирования начинается в фоновом режиме, в то время как несколько вызовов CopyHere () будут мешать друг другу, и ZIP не будет создан правильно. Цикл ожидания здесь необходим, чтобы это исправить. Мой цикл ожидания основан на ответе на похожую проблему, опубликованную здесь .
Вот обновленная версия, которая исправляет ошибку «Требуется объект», сообщенную pihentagy . Это временная проблема, поскольку вновь созданный ZIP-файл включается в коллекцию Items, когда скрипт выполняется на быстрых машинах.
источник
Вот моя попытка обобщить встроенные возможности окон для сжатия и распаковки - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders -с-периодического е
с несколькими данными решениями, которые должны работать практически на каждой машине Windows.
источник