В Windows вы можете застегнуть некоторые файлы с помощью
щелкните правой кнопкой мыши → Отправить в → Сжатую (застегнутую) папку.
И распаковать, дважды щелкнув по файлу .zip
и извлечь файлы.
Есть ли способ применить эти возможности из сценария (файл .bat) без необходимости установки стороннего программного обеспечения?
Для расширения Стивен копейки'ы решение 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 или более .Чистая рамки 4.
По состоянию на .Нетто 4.5, PowerShell может сделать это:
в
Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar')
За последние две строчки, Bar
и фу
можно заменить имя папки, чтобы иметь, или как там зовут в уже существующую папку. `foo.zip в обоих случаях действует как zip-файл, либо сохранить как или распаковать из.
Если у вас установлена Java, вы можете сжать в zip-архив, используя команду jar
:
jar -cMf targetArchive.zip sourceDirectory
с = создает новый архивный файл.
М = указывает, что файл манифеста не должны быть добавлены в архив.
Ф = указывает имя целевого файла.
В 2013 году это было невозможно. Microsoft не предоставляла для этого никакого исполняемого файла.
См. эту ссылку, чтобы узнать, как это сделать с помощью VBS. https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows
Начиная с Windows 8, .NET Framework 4.5 устанавливается по умолчанию, с System.IO.Compression.ZipArchive и PowerShell можно написать скрипты для достижения этой цели, см. https://stackoverflow.com/a/26843122/71312
От Майкрософт.В PowerShell.Архив
Вы можете использовать:
Е. Г.:
Компресс-Архиве -Путь C:\Test -Назначение Путь C:\result
Расширить-архиве -путь result.zip -назначение путь C:\Test
Это'т точно молния, но единственный способ сжать файл, используя средства 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][1], [развернуть][2], [makecab дополнительно использует][3]
[1]: http://ss64.com/nt/makecab.html на "makecab и" [2]: http://ss64.com/nt/expand.html на "расширить"и [3]: http://ss64.com/nt/makecab-directives.html на "makecab дополнительно использует и"
С Помощью 7-Zip:
Молния: у вас есть папка foo
, и хотят сжать его в myzip.zip
"C:\Program Files\7-Zip\7z.exe" a -r myzip.zip -w foo -mem=AES256
Распакуйте: вы хотите распаковать его (myzip.zip
) в текущем каталоге (./
)
"C:\Program Files\7-Zip\7z.exe" x myzip.zip -o./ -y -r
Я искал ответ именно на этот вопрос, и, судя по моим исследованиям, ответ DiryBoy' кажется точным.
Я обнаружил, что программа compact.exe сжимает файлы, но не для создания сильно сжатого файла (или набора файлов). Это похоже на опцию, которую вы получаете при щелчке правой кнопкой мыши на букве диска или разделе в Windows. Вы получаете возможность выполнить очистку (удалить временные файлы и т.д.), а также сжать файлы. Сжатые файлы по-прежнему доступны, но они просто сжаты, чтобы освободить место на диске, на котором мало места.
Я также нашел программу compress.exe, которая случайно оказалась у меня на компьютере. Он не является встроенным в большинство машин windows и входит в комплект ресурсов 2003. Он создает своего рода застегнутый файл, но он действительно больше похож на файлы с установочного диска windows (имеет подчеркивание в качестве последнего символа расширения или имени файла). А команда extract.exe извлекает эти файлы.
Однако, если это можно сделать с помощью графического интерфейса, то, скорее всего, есть способ сделать это с помощью пакетного, .vbs или другого типа сценария в командной строке. Поскольку в windows есть опция 'send to' для создания zip-файла, я знал, что должен быть способ сделать это через командную строку, и я нашел несколько вариантов.
Вот отличная ссылка, которая показывает, как застегнуть файл с помощью родных команд windows.
Я протестировал его с каталогом, содержащим несколько вложенных файлов и папок, и он отлично сработал. Просто следуйте формату командной строки.
Существует также способ разархивирования файлов через командную строку, который я тоже нашел. Один из способов - просто открыть окно проводника, показывающее содержимое заархивированного файла. Некоторые из них также используют Java, которая не обязательно является родной для windows, но настолько распространена, что почти кажется таковой.
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
Вы можете использовать скрипт на языке VBScript, завернутые в файл bat. Этот код работает на относительный путь.
Там isn'т необходимости каких-либо сторонних инструментов или зависимостей. Просто установите ИСХОДНЫЙ_КАТАЛОГ
и OUTPUTZIP
.
Имя Файла: ZipUp.летучая мышь
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
Пример использования
SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.zip
CALL ZipUp
Кроме того, вы можете параметризовать этот файл, заменив строки cscript в _zipup.ВБС %ИСХОДНЫЙ_КАТАЛОГ% %OUTPUTZIP%с
cscript в _zipup.ВБС %1 %2, в этом случае он может быть даже более легко вызван из, просто позвонив по телефону
звоните C:\Source\Dir ZipUp C:\Archive.zip`.
Это обновленная версия в ответ предусмотренных @PodTech.Ио
Эта версия имеет весь код ВБС правильно сбежал в пакетный файл. Это's также созданные в подпрограмму, которую можно назвать одной строкой из любого места в пакетный скрипт:
:: === Main code:
call :ZipUp "C:\Some\Path" "C:\Archive.zip"
:: === SubRoutines:
:ZipUp
::Arguments: Source_folder, destination_zip
(
echo:Set fso = CreateObject^("Scripting.FileSystemObject"^)
echo:InputFolder = fso.GetAbsolutePathName^(WScript.Arguments.Item^(0^)^)
echo:ZipFile = fso.GetAbsolutePathName^(WScript.Arguments.Item^(1^)^)
echo:
echo:' Create empty ZIP file.
echo:CreateObject^("Scripting.FileSystemObject"^).CreateTextFile^(ZipFile, True^).Write "PK" ^& Chr^(5^) ^& Chr^(6^) ^& String^(18, vbNullChar^)
echo:
echo:Set objShell = CreateObject^("Shell.Application"^)
echo:Set source = objShell.NameSpace^(InputFolder^).Items
echo:objShell.NameSpace^(ZipFile^).CopyHere^(source^)
echo:
echo:' Keep script waiting until compression is done
echo:Do Until objShell.NameSpace^( ZipFile ^).Items.Count = objShell.NameSpace^( InputFolder ^).Items.Count
echo: WScript.Sleep 200
echo:Loop
)>_zipup.vbs
CScript //Nologo _zipup.vbs "%~1" "%~2"
del _zipup.vbs
goto :eof
Если вам нужно сделать это как часть сценария, то лучший способ это использовать Java. Предполагая, что каталог bin в PATH (в большинстве случаев), вы можете использовать командную строку:
jar xf test.zip
Если Java не на вашем пути, ссылаться на него напрямую:
C:\Java\jdk1.6.0_03\bin>jar xf test.zip
Открытый исходный код-это ваш друг :-)
Вот распакуйте: http://gnuwin32.sourceforge.net/packages/unzip.htm
Есть команды Молния, а также: http://gnuwin32.sourceforge.net/packages/zip.htm
В бинары скачать вполне достаточно.
У меня есть проблема со всеми этими решениями. Они'ре не совсем то же, и все они создают файлы, которые имеют небольшой размер разницы по сравнению с ПКМ --> отправляйте к --> сжатый (сжатом) папка
когда сделаны из той же исходной папки. Ближайший размер-разница у меня была разница в 300 КБ (сценарий > инструкция), в составе:
powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip
(Обратите внимание на -CompressionLevel. Существует три возможных значения: Быстрый, NoCompression & оптимальный (по умолчанию: оптимальная))
Я хотел сделать .bat файл, который должен автоматически сжимать папки WordPress плагин, я'м работает на, в .zip-архив, поэтому я могу загрузить его на сайт WordPress и проверить плагин.
Но почему-то не'т работать с любым из этих автоматическое сжатие, но он работает с ручной юаней сжатия, ведьма я нахожу действительно странным.
И создается сценарий .zip-файлы на самом деле сломать плагинов WordPress до точки, где они могут'т быть активирован, и они также не могут быть удалены изнутри WordPress. Я по SSH в "обратной стороны" из сервера и удалить загруженные файлы плагинов сами, вручную. В то время как вручную РМБ-сгенерированные файлы нормально работают.
Вы говорите, что вы'вновь пытается сделать это без стороннего программного обеспечения. Я'м не уверен, если вы'д рассматривать .Чистый и"сторонних" по-программное обеспечение.
Но вы можете создавать свои собственные утилиты командной строки .Чистая. Он должен'т занять больше, чем несколько строк кода.
Вы можете распаковать заархивированный или собственный сжатый файл Windows с помощью команды Expand, например.
expand MyFile.zip myFile
В zip файл:
C:\> zip -9 -m -o file.dat.zip file.dat