Как вы можете 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 команды.
Я тестировал его с каталога, содержащего несколько вложенных файлов и папок и он работал отлично. Просто следуйте формату командной строки.
существует также способ распаковать файлы через командную строку, которую я также нашел. Один из способов, просто открывает окно Проводника, показывая, что содержание архивный файл-это. Некоторые из них также используют Java, который не обязательно является родным для windows, но настолько распространен, что это почти кажется так.
вы можете использовать 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 файла для сжатия