[powershell] Powershell에서 파일의 압축을 푸는 방법은 무엇입니까?

나는이 .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가 여전히 비어 있습니다.



답변

System.IO.Compression.ZipFile 에서 ExtractToDirectory 를 사용하는 간단한 방법은 다음과 같습니다 .

Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
    param([string]$zipfile, [string]$outpath)

    [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}

Unzip "C:\a.zip" "C:\a"

대상 폴더가 존재하지 않으면 ExtractToDirectory가이를 생성합니다. 다른 경고 :

또한보십시오:


답변

PowerShell v5 +에는 다음과 같은 확장 아카이브 명령 (압축 아카이브)이 내장되어 있습니다.

Expand-Archive c:\a.zip -DestinationPath c:\a


답변

PowerShell v5.1에서는 v5와 약간 다릅니다. MS 문서에 따르면 -Path, 아카이브 파일 경로를 지정 하는 매개 변수가 있어야합니다 .

Expand-Archive -Path Draft.Zip -DestinationPath C:\Reference

그렇지 않으면 실제 경로가 될 수 있습니다.

Expand-Archive -Path c:\Download\Draft.Zip -DestinationPath C:\Reference

확장 아카이브 문서


답변

Expand-Archive매개 변수 집합 중 하나와 함께 cmdlet을 사용하십시오 .

Expand-Archive -LiteralPath C:\source\file.Zip -DestinationPath C:\destination
Expand-Archive -Path file.Zip -DestinationPath C:\destination


답변

저기요 ..

$shell = New-Object -ComObject shell.application
$zip = $shell.NameSpace("put ur zip file path here")
foreach ($item in $zip.items()) {
  $shell.Namespace("destination where files need to unzip").CopyHere($item)
}


답변

Shell.Application.Namespace.Folder.CopyHere () 를 사용 하고 복사하는 동안 진행률 표시 줄을 숨기거나 더 많은 옵션을 사용하려는 경우 설명서는 다음과 같습니다.
https://docs.microsoft.com/en-us / windows / desktop / shell / 폴더 복사

powershell을 사용하고 진행률 표시 줄을 숨기고 확인을 비활성화하려면 다음과 같은 코드를 사용할 수 있습니다.

# We should create folder before using it for shell operations as it is required
New-Item -ItemType directory -Path "C:\destinationDir" -Force

$shell = New-Object -ComObject Shell.Application
$zip = $shell.Namespace("C:\archive.zip")
$items = $zip.items()
$shell.Namespace("C:\destinationDir").CopyHere($items, 1556)

Windows 핵심 버전에서 Shell.Application 사용 제한 사항 :
https://docs.microsoft.com/en-us/windows-server/administration/server-core/what-is-server-core

Windows 핵심 버전에서는 기본적으로 Microsoft-Windows-Server-Shell-Package 가 설치되어 있지 않으므로 shell.applicaton이 작동하지 않습니다.

참고 :이 방법으로 아카이브를 추출하면 시간이 오래 걸리고 Windows GUI 속도가 느려질 수 있습니다


답변

expand-archive아카이브 이름을 따서 명명 된 디렉토리를 사용 하지만 자동 작성하는 경우 :

function unzip ($file) {
    $dirname = (Get-Item $file).Basename
    New-Item -Force -ItemType directory -Path $dirname
    expand-archive $file -OutputPath $dirname -ShowProgress
}