it-swarm-ru.tech

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

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

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

53
user466047

Начиная с 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

29
Steven Penny

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

7
EMMERICH

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

Использование: в поле запуска или в командной строке введите

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

Путь к сценарию, исходная папка, создаваемый 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
6
WSkid

Вот еще одна идея, из 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>
1
eyeH8bingDotCom

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

Можете ли вы заархивировать файл из командной строки, используя встроенную возможность ТОЛЬКО в Windows для архивирования файлов?

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

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

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

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

1
LostUser

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

powershell Compress-Archive . publish.Zip
1
Wagner Bertolini Junior

Возможно запустить скрипт 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
cam029

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

Конечно, в 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:\путь

1
Dwight Wilbanks

Я опубликую что-то, связанное с WSkids answer, к сожалению, я не могу использовать функцию комментария.

Использование метода 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

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

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

0
npocmaka