У меня есть .zip
файл, и мне нужно распаковать весь его контент с помощью Powershell. Я делаю это, но это не похоже на работу:
$shell = New-Object -ComObject shell.application
$zip = $shell.NameSpace("C:\a.zip")
MkDir("C:\a")
foreach ($item in $zip.items()) {
$shell.Namespace("C:\a").CopyHere($item)
}
В чем дело? Каталог C:\a
по-прежнему пуст.
powershell
Ули Кункель
источник
источник
Ответы:
Вот простой способ использования ExtractToDirectory из System.IO.Compression.ZipFile :
Обратите внимание, что если целевая папка не существует, ExtractToDirectory создаст ее. Другие предостережения:
Смотрите также:
источник
Exception calling "ExtractToDirectory" with "2" argument(s): "End of Central Directory record could not be found." At line:5 char:5 + [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $ou ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : InvalidDataException
Add-Type : Cannot add type. The assembly 'System.IO.Compression.FileSystem' could not be found.
. У меня установлен .NET 4.6.2, и я проверил, что сборка находится в GAC, но я не понял, почему я получаю эту ошибку.В PowerShell v5 + есть команда Expand-Archive (а также Compress-Archive), встроенная в:
источник
$PSVersionTable.PSVersion
чтобы определить, какую версию PowerShell вы используете.OutputPath
был изменен наDestinationPath
(ссылка msdn.microsoft.com/powershell/reference/5.1/… )Expand-Archive -Path .\a.zip -DestinationPath .
В PowerShell v5.1 это немного отличается от v5. Согласно документации MS, он должен иметь
-Path
параметр для указания пути к файлу архива.Или же, это может быть реальный путь:
Развернуть-Архив Док
источник
Expand-Archive Draft.Zip -DestinationPath C:\Reference
работает без проблем. Кроме того, это не фактический путь, а абсолютный путь.Используйте
Expand-Archive
командлет с одним из набора параметров:источник
Эй, это работает для меня ..
источник
CopyHere
методом. Я думаю, что @OlegKazakov уже решил свою проблему. Тем не менее, я разместил эту ссылку здесь для других пользователей, которые могут найти эту тему: docs.microsoft.com/en-us/previous-versions/windows/desktop/…Для тех, кто хочет использовать Shell.Application.Namespace.Folder.CopyHere () и хочет скрыть индикаторы выполнения при копировании или использовать дополнительные параметры, документация находится здесь:
https://docs.microsoft.com/en-us / окна / настольные / оболочка / папка-copyhere
Чтобы использовать powershell, скрывать индикаторы выполнения и отключать подтверждения, вы можете использовать код, подобный следующему
Ограничения использования Shell.Application для основных версий Windows:
https://docs.microsoft.com/en-us/windows-server/administration/server-core/what-is-server-core
В основных версиях Windows по умолчанию Microsoft-Windows-Server-Shell-Package не установлен, поэтому shell.applicaton не будет работать.
примечание : извлечение архивов таким способом займет много времени и может замедлить работу графического интерфейса Windows.
источник
Используя,
expand-archive
но автоматически создаваемые каталоги, названные в честь архива:источник
outputPath
как в принятом ответе. В этом решении (как это jpmc26 сказал), вы всегда будете создавать новый каталог в текущем каталоге , так что возможно вам нужно установить текущий каталог перед вызовомunzip
С помощью:
источник
$archive
и$archiveFile
в концеForEach
Цикл обрабатывает каждый файл ZIP, расположенный в$filepath
переменнойисточник