1

Мне нужна команда / сценарий для сжатия и архивирования командной строки Windows (начиная с версии 7), для которой не требуются внешние инструменты или утилиты, включая PowerShell, поскольку я не очень хорошо разбираюсь в сценариях Windows. Он должен быть полностью независимым, как команды zix / tar в Unix / Linux.

Я много искал этот тип команды или сценария, но пока не нашел. Кто-нибудь нашел что-то подобное?

2 ответа2

1

По крайней мере, Windows 7 (и XP ... Я пока не совсем уверен в состоянии Windows 10) не имеет интерфейса командной строки для работы с поддержкой сжатия ZIP, предоставляемой поддержкой "Сжатые папки Microsoft" (например, что может использовать Explorer).

Однако вы можете сделать это, просто создав файл сценария, а затем используя Windows Script Host, который встроен в Windows XP и более поздние версии (как и поддержка "Сжатые папки Microsoft").

Например, в ответе Питера Мортенсена показано содержимое пакетного файла, который можно создать, который записывает 8 строк VBScript, которые затем используют поддержку "Сжатые папки Microsoft".

Обратите внимание, что "сон 2000" в конце просто делает паузу в 2 секунды и не так безопасен для подхода, как подход Джорджа Йоки (проверка на активное сжатие) или проверка.Считать (что-то вроде представления kayleeFrye_onDeck).

Я не уверен, что ответ на основе WSH нарушает цели, которые вы намеревались, когда вы сказали, что вам не нужен PowerShell, но в действительности он вообще не использует PowerShell.

1

Вам не нужно быть опытным автором сценариев, чтобы использовать PowerShell, и вам не нужно использовать явный сценарий PowerShell (или его интерфейс IDE) для использования команд PowerShell - вы можете использовать команды PowerShell и сделать их частью логики пакетного сценария. выполнить и использовать.

Я думаю, что вы ищете собственный способ Windows для выполнения задачи, и вы просто хотите убедиться, что он действительно является родным для Windows и будет работать с Windows 7 и выше (новее).


Сжатие и архивирование

Ниже я создал пакетный скрипт, который работает с Windows 10 и Windows 7 и использует логику, которая работает на старых версиях PowerShell, а также на более новых версиях на тот случай, если я использовал более старую логику.

Перетаскивание

Просто перетащите папку, которую вы хотите сжать, в пакетный скрипт, и она будет заархивирована в виде zip-файла, и она создаст новый zip-файл в том же месте, но с <foldername you archive>.zip так что если вы перетащите C:\User\User\Desktop\New Folder в сценарии, он создаст C:\User\User\Desktop\New Folder.zip

Перетащите папку в скрипт

Создано впоследствии

Сценарий

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

Исходная ссылка на идею логики PowerShell

@ECHO ON

::SET src_folder=C:\Users\User\Desktop\Test
::SET destfile=C:\Users\User\Desktop\Test.zip

SET src_folder=%~1
SET destfile=%~FN1.zip

:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem")>>"%PSScript%" 
ECHO $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal         >>"%PSScript%" 
ECHO $includebasedir = $true                                                       >>"%PSScript%" 
ECHO [System.IO.Compression.ZipFile]::CreateFromDirectory("%src_folder%", "%destfile%", $compressionLevel, $includebasedir)>>"%PSScript%" 

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

EXIT

Распаковка и извлечение

Я также создал пакетный скрипт ниже, который работает с Windows 10 и Windows 7 и использует логику, которая работает на старых версиях PowerShell, а также на более новых версиях на случай, если я использовал более старую логику.

Перетаскивание

Просто перетащите zip-файл, который хотите распаковать, в сценарий, и он извлечет содержимое файла в ту же папку, где находится zip-файл, который вы перетащили в сценарий. Поэтому, если у вас есть C:\User\User\Desktop\ZipMe.zip и в нем есть папка с именем ZipMe, после того, как вы перетащите ее в сценарий, она извлечет папку ZipMe в C:\User\User\Desktop.

Перетащите файл zip в скрипт

Извлечено впоследствии

Сценарий

Важное замечание: Переменная в приведенном выше сценарии сжатия и архивирования (первый сценарий вверху), отображаемый как $includebasedir = $true указывает на сжатие фактической папки и содержимого внутри. Если вместо этого значения установлено значение $false или вы извлекаете из zip-файла, не содержащего папку, приведенный ниже сценарий извлечет все файлы и другое содержимое в ту же папку, в которой находится zip-файл, поэтому будет создано 100 файлов и папок. извлеченный, если это - то, что содержало файл почтового индекса без родительской папки в пределах файла.

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

@ECHO ON

::SET dest_folder=C:\Users\User\Desktop\New folder
::SET zip_file=C:\Users\User\Desktop\Test\test.zip

SET dest_folder=%~DP1
SET zip_file=%~1

:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.Filesystem")>>"%PSScript%" 
ECHO [io.compression.zipfile]::ExtractToDirectory("%zip_file%", "%dest_folder%")   >>"%PSScript%" 

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

GOTO :EOF

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .