Создавать.zip папка из командной строки- (Windows)

можно ли создать .zip-файл из папки в командной строке, я не хочу использовать какой-либо исполняемый файл третьей стороны.

Я думал что-то вроде 'отправить в сжатую папку', но я не знаю как это сделать...

9
задан Steven Penny
02.04.2023 13:50 Количество просмотров материала 2879
Распечатать страницу

10 ответов

начиная с PowerShell 5 (Февраль 2016), вы можете использовать "Compress-Archive":

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

27
отвечен Steven Penny 2023-04-03 21:38

Я не думаю, что есть командная строка для ZIP-файлов, встроенных в Windows (кроме compress в Server 2003 Resource Kit). Вам придется использовать третью сторону. Все любят в 7-Zip!

7
отвечен EMMERICH 2023-04-03 23:55

Я объединил этот скрипт из нескольких разных источников, чтобы лучше удовлетворить мои потребности. Скопируйте и вставьте скрипт в файл с расширением".vbs". Сценарий был первоначально сделан для Windows XP, Но он также работает в Windows 7 x64 Ultimate - нет гарантии, Если Windows будет держать вокруг различных объектов оболочки, которые это использует.

использование: в поле Выполнить или командной строки положить -

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

путь к скрипту, исходная папка, zip-файл, чтобы сделать (include .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
6
отвечен WSkid 2023-04-04 02:12

вот отличная ссылка, которая показывает, как заархивировать файл с помощью собственных команд windows.

можно zip в файл из командной строки, используя только Windows' Встроенный в zip-файлы?

Я проверил его с каталогом, содержащим несколько вложенных файлов и папок, и он работал отлично. Просто следуйте формату командной строки.

существует также способ распаковать файлы через командную строку, которую я нашел. Один путь, как раз приносит откройте окно Проводника, показывающее содержимое zip-файла. Некоторые из них также используют Java, который не обязательно является родным для windows, но настолько распространен, что это почти кажется.

имеет ли Windows 7 распаковать в командной строке, установленной по умолчанию?

https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line

1
отвечен LostUser 2023-04-04 04:29

Это старый вопрос, но актуальности до сих пор.

Windows, конечно, имеет свой собственный алгоритм сжатия, встроенный для использования zip-файлов, но он действительно плохо работает по сравнению с продуктом с открытым исходным кодом 7zip, найденным здесьhttp://www.7-zip.org/

другие уже обсуждали различные методы использования встроенных функций windows, мое решение требует установки дополнительного программного обеспечения.

7Zip поддерживает широкий спектр файлов, включая ZIP, RAR, CAB и ISO, а также собственный формат 7z.

вы можете просмотреть справку командной строки: "Files\7-Zip\7z.exe C:\Program" --помочь

для простого добавления в zip архив:

"C:\Program Files\7-Zip\7z.exe" имени.zip c:\path

1
отвечен Dwight Wilbanks 2023-04-04 06:46

я опубликую что-то связанное с 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
0
отвечен ViRuSTriNiTy 2023-04-04 09:03

вот моя попытка обобщить встроенные возможности windows для сжатия и распаковки - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders-with-batch-f

с несколькими данными решениями, которые должны работать почти на каждой машине windows.

0
отвечен npocmaka 2023-04-04 11:20

можно запустить сценарий PowerShell из BAT. Bat-файл получает путь к архивируемому каталогу и имя 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
0
отвечен cam029 2023-04-04 13:37

вот еще одна идея, из 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>
0
отвечен eyeH8bingDotCom 2023-04-04 15:54

представьте, что вы хотите сжать ту же папку, что и в командной строке, не открывая окно powershell:

powershell Compress-Archive . publish.zip
0
отвечен Wagner Bertolini Junior 2023-04-04 18:11

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх