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

В Windows вы можете застегнуть некоторые файлы с помощью

щелкните правой кнопкой мыши → Отправить вСжатую (застегнутую) папку.

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

Есть ли способ применить эти возможности из сценария (файл .bat) без необходимости установки стороннего программного обеспечения?

Комментарии к вопросу (8)

Для расширения Стивен копейки'ы решение 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.

Комментарии (6)

По состоянию на .Нетто 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-файл, либо сохранить как или распаковать из.

Комментарии (3)

Если у вас установлена Java, вы можете сжать в zip-архив, используя команду jar:

jar -cMf targetArchive.zip sourceDirectory

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

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

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

Комментарии (5)
Решение

В 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

Комментарии (8)

В PowerShell 5.0

От Майкрософт.В PowerShell.Архив Вы можете использовать:

Е. Г.:

  • Создать result.zip из папки весь "тест":

Компресс-Архиве -Путь C:\Test -Назначение Путь C:\result

  • Извлечь содержимое result.zip в папке указанной "тест":

Расширить-архиве -путь result.zip -назначение путь C:\Test

Комментарии (3)

Это'т точно молния, но единственный способ сжать файл, используя средства Windows:

makecab  .cab

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

expand .cab 

Расширенный пример (из 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 дополнительно использует и"

Комментарии (1)

С Помощью 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
Комментарии (10)

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

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

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

Однако, если это можно сделать с помощью графического интерфейса, то, скорее всего, есть способ сделать это с помощью пакетного, .vbs или другого типа сценария в командной строке. Поскольку в windows есть опция 'send to' для создания zip-файла, я знал, что должен быть способ сделать это через командную строку, и я нашел несколько вариантов.

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

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

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

Комментарии (1)

Вы можете использовать скрипт на языке 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`.

Комментарии (3)

Это обновленная версия в ответ предусмотренных @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
Комментарии (0)

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

jar xf test.zip

Если Java не на вашем пути, ссылаться на него напрямую:

C:\Java\jdk1.6.0_03\bin>jar xf test.zip
Комментарии (0)

Открытый исходный код-это ваш друг :-)

Вот распакуйте: http://gnuwin32.sourceforge.net/packages/unzip.htm

Есть команды Молния, а также: http://gnuwin32.sourceforge.net/packages/zip.htm

В бинары скачать вполне достаточно.

Комментарии (5)

У меня есть проблема со всеми этими решениями. Они'ре не совсем то же, и все они создают файлы, которые имеют небольшой размер разницы по сравнению с ПКМ --> отправляйте к --> сжатый (сжатом) папка когда сделаны из той же исходной папки. Ближайший размер-разница у меня была разница в 300 КБ (сценарий > инструкция), в составе:

powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip

(Обратите внимание на -CompressionLevel. Существует три возможных значения: Быстрый, NoCompression & оптимальный (по умолчанию: оптимальная))

Я хотел сделать .bat файл, который должен автоматически сжимать папки WordPress плагин, я'м работает на, в .zip-архив, поэтому я могу загрузить его на сайт WordPress и проверить плагин.

Но почему-то не'т работать с любым из этих автоматическое сжатие, но он работает с ручной юаней сжатия, ведьма я нахожу действительно странным.

И создается сценарий .zip-файлы на самом деле сломать плагинов WordPress до точки, где они могут'т быть активирован, и они также не могут быть удалены изнутри WordPress. Я по SSH в "обратной стороны" из сервера и удалить загруженные файлы плагинов сами, вручную. В то время как вручную РМБ-сгенерированные файлы нормально работают.

Комментарии (2)

Вы говорите, что вы'вновь пытается сделать это без стороннего программного обеспечения. Я'м не уверен, если вы'д рассматривать .Чистый и"сторонних" по-программное обеспечение.

Но вы можете создавать свои собственные утилиты командной строки .Чистая. Он должен'т занять больше, чем несколько строк кода.

Класс Zip-Файл

Комментарии (0)

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

expand MyFile.zip myFile
Комментарии (5)

В zip файл:

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