Как вы можете zip или распаковать из скрипта, используя только встроенные возможности Windows? [закрытый]

В Windows вы можете zip некоторые файлы

правый клик --> отправить --> сжатый (сжатом) папка

и unzip двойным щелчком по кнопке .zip file и извлечь файлы.

есть ли способ применить эти способности из сценария (.bat file)без необходимости установки какой-либо третьей стороны?

14 ответов


еще в 2013 году, это было невозможно. MS не предоставила исполняемый файл для этого.

см. эту ссылку для некоторого способа VBS сделать это. https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows

из Windows 8 на, .Net Framework 4.5 устанавливается по умолчанию, с система.ИО.Сжатие.ZipArchive и PowerShell доступны, можно писать сценарии для достижения этого, видеть https://stackoverflow.com/a/26843122/71312


чтобы развернуть решение PowerShell Стивена Пенни, его можно включить в пакетный файл, вызвав powershell.exe, как это:

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar'); }"

Как сказал Иван Шило, это не будет работать с PowerShell 2, для этого требуется PowerShell 3 или выше и .NET Framework 4.


PowerShell может это сделать

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar')

Если у вас Java установлен, вы можете сжать в ZIP-архив с помощью jar:

jar -cMf targetArchive.zip sourceDirectory

c = создает новый файл архива.

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

f = указывает имя целевого файла.


PowerShell 5.0

С Microsoft.PowerShell.Archive вы можете использовать:

например:

  • создать result.zip всего :

    Compress-Archive -Path C:\Test -DestinationPath C:\result
    
  • извлечь содержимое result.zip в указанной Test папка:

    Expand-Archive -Path result.zip -DestinationPath C:\Test
    

это не совсем zip, но единственный способ сжать файл с помощью инструментов Windows:

makecab <source> <dest>.cab

для распаковки:

expand <source>.cab <dest>

расширенный пример (от ss64.com):

Create a self extracting archive containing movie.mov:
C:\> makecab movie.mov "temp.cab"
C:\> copy /b "%windir%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"

Подробнее: makecab, расширения, makecab advanced использует


Использование 7-Zip:

Zip: у вас есть папка foo, и хотите застегнуть его на myzip.zip

"C:\Program Files-Zipz.exe" a  -r myzip.zip -w foo -mem=AES256

распакуйте: вы хотите распаковать его (myzip.zip) в текущей директории (./)

"C:\Program Files-Zipz.exe" x  myzip.zip  -o./ -y -r

Я искал ответ на этот точный вопрос, и из моих исследований ответ DiryBoy кажется точным.

Я нашел компактный.exe программа сжимает файлы, но не для создания сильно сжатого файла (или набора файлов). Это похоже на опцию, которую вы получаете при щелчке правой кнопкой мыши на букву диска или раздела В Windows. Вы получаете возможность выполнять очистку (удалять временные файлы и т. д.), а также сжимать файлы. Сжатые файлы по-прежнему доступны, но только сжатый, чтобы создать пространство на диске с низким пространством.

Я нашла компресс.exe, который у меня был на моем компьютере. Он не является изначально на большинстве компьютеров windows и является частью набора ресурсов 2003. Он делает сжатый файл, но он действительно больше похож на файлы с установочного диска windows (имеет подчеркивание в качестве последнего символа расширения или имени файла). И выписка.команда exe извлекает эти файлы.

однако, мантра, если это можно сделать изначально через GUI, тогда, вероятно ,есть способ сделать это через пакет.ВБС или какой-либо другой тип скрипта в командной строке. Поскольку у windows была опция "отправить" для создания zip-файла, я знал, что должен быть способ сделать это через командную строку, и я нашел некоторые варианты.

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

https://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili

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

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

https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

как распаковать файл с помощью командной строки?


вы можете использовать vbsscript, завернутый в файл BAT... это мой код, который работает на относительном пути...

Не надо никаких сторонних инструментов или зависимостям.. просто установите источник и назначение.

имя файла: zipping.летучая мышь!--2-->

echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs

'Create empty ZIP file.
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar) >> _zipup.vbs

echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs


echo 'Keep script waiting until compression is done
echo Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count >> _zipup.vbs
echo     WScript.Sleep 200 >> _zipup.vbs
echo Loop >> _zipup.vbs

CScript  _zipup.vbs  %SOURCEDIR%  %OUTPUTZIP%

del _zipup.vbs

Open source - ваш друг: -)

вот распаковать:http://gnuwin32.sourceforge.net/packages/unzip.htm

существует команда ZIP, а также: http://gnuwin32.sourceforge.net/packages/zip.htm

загрузка двоичных файлов достаточно.


Если вам нужно сделать это как часть скрипта, то лучший способ-использовать Java. Предполагая, что каталог bin в PATH (в большинстве случаев), вы можете использовать командную строку:

jar xf test.zip

Если Java не находится в вашей ссылке pass напрямую:

C:\Java\jdk1.6.0_03\bin>jar xf test.zip

вы говорите, что пытаетесь сделать это без стороннего программного обеспечения. Я не уверен, что вы считаете .NET "сторонним" программным обеспечением.

но вы можете создать свою собственную утилиту командной строки .Сеть. Это не должно требовать больше, чем несколько строк кода.

https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs. 110).aspx


вы можете распаковать сжатый или сжатый файл Windows с помощью расширения, например,

expand MyFile.zip myFile

для zip файла:

C:\> zip -9 -m -o file.dat.zip file.dat
  • -9 максимальное сжатие
  • -м удалить исходный файл после успешного сжатия
  • - o установите дату изменения zip-файла так же, как и исходный файл
  • слишком плохо, что нужно дать ему имя желаемого zip-файла вместо того, чтобы просто добавлять .zip расширение на имя ot файла для сжатия