1

중첩 된 zip 파일이 하나있는 요구 사항을 달성하려고합니다. 한 번 클릭으로 모든 파일의 압축을 풀어야합니다. 이를 위해 하나의 압축 폴더에서만 작동하고이를 확장해야하는 코드가 있습니다. 여러 zip 폴더의 압축을 해제하는 방법

Add-Type -AssemblyName System.IO.Compression.FileSystem 
function Unzip 
{ 
param([string]$zipfile, [string]$outpath) 
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath) 
} 
Unzip "E:\Softwares\PS\AllFiles.zip" "E:\Softwares\PS\AllFiles" 

이 하나가 나에게 중첩 된 지퍼 폴더에 압축을 해제하려면이 옵션을 확장 할 수있는 방법을 제안 할 수 있습니다 ..

+0

zip 파일에있는 파일의 목록을 가져와야합니다. 일단 그 파일을 가져 오면 재귀 적으로 '압축 풀기'기능을 호출하십시오. –

+0

나는 이걸 처음 접했을 때 좀 더 정교 해 주실 수 있겠습니까? – Meghana

+2

정말 문제에 대해 더 많이 생각해야합니다. * I *는 파일 시스템에서 다른 zip 파일에서 추출한 zip 파일을 찾기 위해 관련없는 zip 파일을 가져 오지 않도록하기 위해 임시 디렉토리가 필요합니다. 지금까지 실제 코드는 발생하지 않습니다. 이것은 코드 작성 서비스가 아닙니다. 당신은 혼자서 답을 찾으려고 노력하고, _specific_ 문제와 당신이 이해하지 못하거나 제대로 작동하지 못하는 것을 가지고 우리에게 와야합니다. –

답변

0

귀하의 질문은 매우 상세한되지 않습니다 : 아래 내가 확장하는 데 필요한 코드입니다. 나는 C : \ temp \ ziptest에 파일을 가지고 약간 놀았는데, 이는 여러개의 중첩 된 zip 파일을 넣었다. 계정에 필요한 변수가 더 많을 수 있습니다 (예 : zip 파일에 암호가 있거나 표준 zip 파일 또는 .7z 등).

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



$flag = $true 
while($flag) 
{ 
$zipFiles = Get-ChildItem -Path "C:\temp\ziptest" -Recurse | Where-Object {$_.Name -like "*.zip"} 

if($zipFiles.count -eq 0) 
{ 
    $flag = $false 
} 

elseif($zipFiles.count -gt 0) 
{ 
    foreach($zipFile in $zipFiles) 
    { 
    #create the new name without .zip 
    $newName = $zipFile.FullName.Replace(".zip", "") 

    Unzip $zipFile.FullName $newName 

    #remove zip file after unzipping so it doesn't repeat 
    Remove-Item $zipFile.FullName 
    } 
} 
Clear-Variable zipFiles 
} 
+0

안녕하세요.이 코드 조각이 예상대로 작동하고 있습니다. dis 코드는 PS 5 버전에서만 작동하지만 PS V2.0에서 작동해야합니다. Expand-Archive와 같은 오류가 발생했습니다. param [string] $ source = C : \ Files.zip ", [string] $ dest ="C : \ Files " $ mainzip = gci -Path $ source -Filter "* .zip" 확장 - 아카이브 $ mainzip.fullname -DestinationPath $ dest $ childzip = gci -Path $ dest -Filter "* zip" foreach ($ childzip의 $ childfile) { 확장 아카이브 - 경로 $ childfile.fullname -Destinationpath $ dest } – Meghana

+0

코드에서 expand-archive 명령은 어디에 사용합니까? 위와 동일한 Unzip 함수를 사용하고 있습니까? expand-archive 대신 위의 Unzip 함수를 사용하십시오. – JMIII

+0

위의 코드는 아무것도 표시하지 않습니다. 실행 중이 아니며 오류가 발생하지 않았 음을 의미합니다. – Meghana