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

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

Advertisement

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

Я думал о чем-то вроде ‘send to compressed folder’, но я не знаю, как это сделать…

Advertisement

Ответы (10)

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

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

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

Или:

Compress-Archive input.txt output.zip

input.txt здесь также может быть каталог 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

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

6
Advertisement
6
6
2010-10-20 08:32:39 +0000
4
4
4
2018-07-04 11:29:13 +0000

Представьте, что вы хотите сжать ту же папку, что и в командной строке, БЕЗ открытия окна силовой оболочки:

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

Вот еще одна идея, из 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>
2
2
2
2016-11-30 12:19:08 +0000

Можно запустить скрипт 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
1
Advertisement
1
1
2013-11-15 04:21:10 +0000

Вот отличная ссылка, показывающая, как заархивировать файл с помощью родных команд windows. Можете ли вы заархивировать файл из командной строки, используя только встроенную в Windows возможность заархивировать файлы?

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

Есть также способ распаковать файлы из командной строки, который я нашел. Одним из способов является открытие окна проводника, показывающего содержимое сжатого файла. Некоторые из них также используют Java, которая не обязательно является родной для Windows, но настолько распространена, что это почти так и кажется. Устанавливается ли распаковка из командной строки в Windows 7 по умолчанию? https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line

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

Это старый вопрос, но его актуальность все еще актуальна.

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.

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

Я напишу что-то связанное с ответом 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
1
1
1
2015-01-22 12:27:53 +0000

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

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

Advertisement