Powershell에서 파일을 압축 / 압축 해제하는 방법은 무엇입니까?


답변:


21

DotNetZip 을 사용하면 PowerShell에서이 작업을 수행 할 수 있습니다. 한 줄짜리가 아니지만 라이브러리에서 필요한 PowerShell 스크립트를 작성할 수 있습니다.

COM 인터페이스를 사용할 수도 있습니다 ( Windows PowerShell로 파일 압축을 참조한 다음 Windows Vista 사이드 바 가제트 패키지 참조) .

인터넷 검색 "zip powershell"또는 "unzip powershell"도 유용한 결과를 얻을 수 있습니다.


+1 링크 된 기사는 가장 많이 답변 된 답변과 달리 유용한 작업이 있습니다
Ruben Bartelink

5
Google 검색을 제안하면 -1입니다. 이 "압축 해제 PowerShell을"에 대한 구글 검색에서 상위 StackExchange 결과입니다
열망 기계

154

이것은 외부 도구없이 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())

26
기존 파일을 덮어 쓰려면 $ destination.Copyhere ($ zip_file.items (), 0x10)를 사용하십시오. 0x4는 대화 상자를 숨기고 0x14는 이들을 결합하고 대화 상자를 덮어 쓰고 숨 깁니다.
피터

3
라인 $destination.Copyhere($zip_file.items())은 실제 압축 해제를 수행합니다.
Jonathan Allen

2
원하는 경우 위 기능을 함수로 소포 할 수 있습니다. function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) }
James Holwell

6
이것이 정답입니다.
tugberk

2
zip 파일에 폴더 만 있으면 (항목이 비어 있음)
James Woolfenden

56

이제 .NET Framework 4.5에는 다음 과 같이 사용할 수 있는 ZipFile 클래스가 있습니다.

[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)

1
ExtractToDirectory하는 간단한 방법 기존의 모든 파일을 덮어 쓸 수있는 옵션이 있다면 좋을.
James Dunne

1
이것은 .NET 4.5에서 작동합니다. 그러나 Powershell V3도 필요합니다.
DalSoft

3
Add-Type으로 어셈블리를로드합니다 (예 : Add-Type -AssemblyName System.IO.Compression.FileSystem
Mike

2
@JamesDunne-보존해야 할 다른 파일이 없으면 'Remove-Item -Recurse $ TargetFolder'를 사용할 수 있습니다. 그렇지 않으면 원하는 것을 할 수 있지만 사소하지는 않습니다. 읽기 위해 zip을 연 다음 zip을 걸어 이전 대상 객체를 삭제하고 새 객체를 포장 해제해야합니다. 운이 좋으면 쉬운 솔루션이 효과가 있습니다. ;)
Mike

3
상대 파일 위치는 PowerShell 디렉토리가 아닌 .NET 현재 디렉토리를 사용합니다 . 여기를 참조 하십시오 . 아마도 논증에 더 좋을 것입니다 . (Resolve-Path $someDir).Path
jpmc26

18

당신은 체크 아웃하실 수 있습니다 PowerShell을 커뮤니티 확장 (PSCX) 이 특별히 cmdlet을 가지고있다.


1
+1 PSCX는 훌륭한 애드온 cmdlet 세트입니다. 원하는 항목과 원하지 않는 항목을 더 많이 선택하여 선택할 수 있기를 바랍니다. Powershell 인스턴스에서 많은 부분이 바뀌고있는 것 같습니다.
marc_s

동료를 위해 가능한 경우 실제로 PSCX 설치를 자동화하고 싶기 때문에이 문제가 발생했습니다. 내가 어떤 종류의 문제에
부딪 치려고

16

나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 트위터에 링크 된 것을 보았습니다. 현재 답변을 게시 할 것이라고 생각했습니다.

현재 Windows 10 또는 Windows Management Framework 5 Production Preview 를 통해 제공되는 PowerShell 5에는 'zipping'및 'unzipping'을위한 두 가지 기본 제공 cmdlet이 제공됩니다.


3
오래된 질문에 새로운 정보를 제공 하는 것이 좋습니다 . ;) +1
jpmc26 3

5

몇 년 동안 사용하고 UNIX 환경에서 사용하는 infozip 바이너리를 사용하는 가장 간단한 솔루션을 찾습니다.

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.

텍스트 출력 주위에 powershell 래퍼를 배치하는 것이 쉽지만 실제로는 필요하지 않으므로 방해하지 않았습니다.

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


5

또한 Info-ZIP (대부분의 다른 Zip 유틸리티에있는 Zip 엔진)와 7-Zip도 좋아합니다. GUI와 명령 줄 Zip 유틸리티가 모두 있습니다. 요점은 대부분의 PowerShell 작업에 사용할 수있는 훌륭한 명령 줄 유틸리티가 있다는 것입니다.

PowerShell을 염두에두고 빌드되지 않은 명령 줄 유틸리티를 실행하는 데 필요한 몇 가지 트릭이 있습니다.

  • 이름에 숫자로 시작하는 실행 파일을 실행하려면 앰퍼샌드 (&)로 시작하십시오.

    & 7zip.exe

  • 유틸리티는 명령 행에서 따옴표로 표시 할 것으로 예상되는 각 토큰을 랩핑하십시오.

    & "c : \ path with space \ SomeCommand.exe" "/ parameter2" "/ parameter2" "parameter2의 값" "Value2`"(따옴표 포함) "

이 시도:

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

또는:

zip filename.zip (Get-Content ListOfFiles.txt)

2

James Holwell 나는 당신의 대답을 좋아하지만 조금 확장했습니다

# 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()) 
}



0

기본 Windows OS 명령을 사용하여 동기 방식으로 파일을 압축 및 압축 해제하는 PowerShell 2.0 호환 모듈을 만들었습니다. 이것은 Windows XP와 같은 구형 OS에서 작동하며 .Net 4.5 또는 기타 외부 도구가 필요하지 않습니다. 이 기능은 파일이 모두 압축 / 압축 해제 될 때까지 스크립트 실행을 차단합니다. 내 블로그에서 자세한 정보와 모듈을 찾을 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.