Как распаковать /распаковать файлы в Powershell?

Есть ли однострочный файл, который будет распаковывать /распаковывать файлы (* .zip) в PowerShell?

103 голоса | спросил BlueGene 3 J0000006Europe/Moscow 2009, 19:57:09

11 ответов


21

DotNetZip позволит вам сделать это от PowerShell. Это не однострочный, но библиотека позволит вам написать сценарий PowerShell, который вам нужен.

Вы также можете использовать COM-интерфейс, см. Сжатие файлов с помощью Windows PowerShell затем упаковывает гаджет боковой панели Windows Vista .

Googling «zip powershell» или «unzip powershell» также может принести полезные результаты.

ответил Kevin Kuphal 3 J0000006Europe/Moscow 2009, 20:02:35
153

Так вы можете делать это исключительно из Powershell без каких-либо внешних инструментов. Это распакует файл с именем test.zip в текущий рабочий каталог:

$shell_app=new-object -com shell.application
$filename = "test.zip"
$zip_file = $shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items())
ответил Ameer Deen 14 72010vEurope/Moscow11bEurope/MoscowSun, 14 Nov 2010 04:36:43 +0300 2010, 04:36:43
54

Теперь в .NET Framework 4.5 существует класс ZipFile , который вы можете использовать следующим образом:

[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
ответил mousio 30 SunEurope/Moscow2012-12-30T21:46:38+04:00Europe/Moscow12bEurope/MoscowSun, 30 Dec 2012 21:46:38 +0400 2012, 21:46:38
18

Возможно, вы захотите проверить Расширения сообщества PowerShell (PSCX) , в котором есть специальные командлеты для этого .

ответил Kevin Colby 3 J0000006Europe/Moscow 2009, 19:59:54
13

Я знаю, что это очень старый вопрос, но я просто видел, что он связан с Twitter, когда я решил опубликовать текущий ответ.

PowerShell 5, доступный в настоящее время в Windows 10 или через Windows «Представление« Управление »5« Предварительный просмотр » содержит два встроенных командлета для« zipping »и« unzipping »:

ответил Windos 17 +03002015-10-17T23:59:07+03:00312015bEurope/MoscowSat, 17 Oct 2015 23:59:07 +0300 2015, 23:59:07
5

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

PS> zip -9r ../test.zip * 
PS> cd .. 
PS> unzip -t test.zip Archive:  test.zip
    testing: LinqRepository/          OK
    testing: LinqRepository/ApplicationService.cs   OK
    testing: LinqRepository/bin/      OK 
... 
No errors detected in compressed data of test.zip.

Было бы неплохо поместить оболочку с оболочкой из командной строки, но на практике мне это никогда не нужно, поэтому я не беспокоился.

http://www.info-zip.org/

ответил Brian Reiter 3 PM000000110000002931 2009, 23:40:29
5

Мне также нравится Info-ZIP (движок Zip, найденный в большинстве других утилит Zip) и 7-Zip , еще один фаворит, в котором есть утилита Zip GUI и командной строки. Дело в том, что есть несколько полезных утилит командной строки, которые будут работать для большинства задач PowerShell.

Есть несколько трюков для запуска утилит командной строки, которые не были созданы с помощью PowerShell:

  • Запуск исполняемого файла, который начинается с числа в имени, предисловие к нему с помощью Ampersand (&).

    & амп; 7zip.exe

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

    & "c: \ path with space \ SomeCommand.exe" "/parameter2" "/parameter2" "value2 value2" Value2 `" с цитатой "

Попробуйте следующее:

zip filename.zip (Get-ChildItem somepath\*)

Или даже:

zip filename.zip (Get-Content ListOfFiles.txt)
ответил Nathan Hartley 11 PM00000070000004031 2011, 19:07:40
2

Джеймс Холлвелл Мне нравится ваш ответ, но я немного расширил его

# Example
#unzip "myZip.zip" "C:\Users\me\Desktop" "c:\mylocation"
function unzip($fileName, $sourcePath, $destinationPath)
{
    $shell = new-object -com shell.application
    if (!(Test-Path "$sourcePath\$fileName"))
    {
        throw "$sourcePath\$fileName does not exist" 
    }
    New-Item -ItemType Directory -Force -Path $destinationPath -WarningAction SilentlyContinue
    $shell.namespace($destinationPath).copyhere($shell.namespace("$sourcePath\$fileName").items()) 
}
ответил Nico 11 +04002013-10-11T21:56:57+04:00312013bEurope/MoscowFri, 11 Oct 2013 21:56:57 +0400 2013, 21:56:57
0

WinRAR может работать в режиме CMD, принимая аргументы

ответил adopilot 3 PM000000110000000231 2009, 23:49:02
0

Породы ионного подхода:

https://dotnetzip.codeplex.com/wikipage?title=PS- Примеры

поддерживает пароли, другие криптовые методы и т. д.

ответил samsmith 14 Jam1000000amWed, 14 Jan 2015 01:53:48 +030015 2015, 01:53:48
0

Я создал модуль, совместимый с PowerShell 2.0, который использует собственные команды ОС Windows, чтобы синхронизировать и распаковывать файлы синхронно. Это работает на более старых ОС, таких как Windows XP, и не требует .Net 4.5 или любых других внешних инструментов. Эти функции также блокируют выполнение сценария до тех пор, пока все файлы не будут сжаты /распакованы. Вы можете найти дополнительную информацию и модуль в моем блоге здесь .

ответил deadlydog 3 Mayam15 2015, 01:13:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132