2011-09-01 6 views
0

저는 재귀 및 7z.exe 유틸리티를 사용하여 여러 .tar 아카이브의 내용을 해당 하위 폴더로 추출하는 PowerShell의 자동화 작업을 수행하고 있습니다.recursive를 사용하여 아카이브와 같은 폴더에 파일을 추출하여 모든 디렉토리를 검색합니다.

gci -r 하위 디렉토리 대신 내 작업 디렉토리의 출력 덤프가 원래 tarball을 찾았습니다.

지금까지 내가 가진 : 루프 내에서 작업 디렉토리를 설정하거나 7Z 팁 감사합니다에

$files=gci -r | where {$_.Extension -match "tar"} 
     foreach ($files in $files) { 
      c:\7z.exe e -y $file.FullName } 

조언.

답변

1

몇 가지 포인트는 :

1) 경로를 유지하는 대신 ex 플래그를 사용하십시오.

2) 대상/출력을 지정하려면 -o을 사용하십시오. 대상 폴더를 tar 파일의 이름 (확장자 없음)으로 지정하고 경로를 tar 파일과 동일하게 지정합니다. 폴더를 제거하고 경로 만 가질 수 있습니다.

3) 현재 디렉토리에있는 파일을 찾습니다. gci -r입니다. 아래에 $scriptDir을 포함 시켰습니다.이 스크립트는 스크립트의 경로 아래에 있습니다. 전체 시스템을 검색하려면, gci c:\ -r

같은 것을 이것은 내가 그것을 할 방법을하면된다 :

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path 
$z ="7z.exe" 

$files=gci $scriptDir -r | where {$_.Extension -match "tar"} 
foreach ($file in $files) { 
    $source = $file.FullName 
    $destination = Join-Path (Split-Path -parent $file.FullName) $file.BaseName 
    write-host -fore green $destination 
    $destination = "-o" + $destination 
    & ".\$z" x -y $source $destination 
} 
1

내가 (새로운 ACCT을 만든) 영업을 해요. 감사 manojlds, 나는 아카이브와 같은 디렉토리에 출력하기 위해

$destination = Join-Path (Split-Path -parent $file.FullName) $file.DirName 

$destination = Join-Path (Split-Path -parent $file.FullName) $file.BaseName 

을 변경하고, 트리 구조를 유지한다. 이 오류 던지고 때문에 는 또한

$z="c:\7z.exe" 
... 
& "$z" x -y $source $destination 

$z ="7z.exe" 
... 
& ".\$z" x -y $source $destination 

불통 (7Z 문제?).

감사합니다.

1

시도해보십시오. 성능 정보, where-object 대신 Filter 매개 변수를 사용하십시오.

gci -r -filter *.tar | foreach { c:\7z.exe x -y $_.FullName $_.DirectoryName } 
+0

내가 -o 플래그를 사용하여 B/C 경로에 공간의 디렉토리 이름을 탈출하기 위해 필요한 도니는 다르게 할 필요하면 실제로 다시 찾을 수 있습니다 :'GCI -r - 필터 * .tar | foreach {c : \ 7z.exe x -y $ _. FullName -o "$ ('"' '+ $ _. DirectoryName +' " ')"}' – lapropriu

3

가 나는 그것이 PowerShell을에 올 때 완전히 완전히 우둔,하지만 압축을 풀 때하는 ("publisher.title.author.year"기본적으로) 각각 포함하는 하나 개 이상의 zip 파일, 서브 디렉토리의 전체 거대한 급류를 다운로드 한 후 각각은 다중 파일 rar arhive의 일부를 포함하고 마침내 (쓸데없는 이름의) pdf 파일이 포함되어 있습니다. ...

그래서이 거친 준비 스크립트를 사용하여 각 하위 디렉토리로 돌아가서 압축을 풉니 다. 그 디렉토리에 zip을 누른 다음 rar 파일을 어셈블하고 해당 디렉토리에 pdf를 추출한 다음 디렉토리 이름으로 pdf의 이름을 바꾸고 디렉토리로 옮깁니다 (결국 결국 기본 디렉토리 ful로 끝납니다 의미있는 이름의 PDF 파일들 ...

어쨌든 - 필자는 말 그대로 PowerShell 지식이 없다고 말했기 때문에 나는 이것을 쓰는 데 2 ​​시간을 낭비했기 때문에 주로 이것을 게시하고있다. (나는 파이썬이나 펄 : P로 5-10 분에 그것을 할 수 있었다) if if 그것은 그물에있어 내가

$subdirs = Get-ChildItem | ?{$_.Attributes -match 'Directory'} 
foreach ($dir in $subdirs) { 
    cd $dir 
    $zip get-childitem | where {$_.Extension -match "zip"} 
    C:\7z.exe x -y $zip.FullName 
    $rar = get-childitem | where { $_.Extension -match "rar"} 
    C:\7z.exe x -y $rar 
    $pwd = get-item . 
    $newname = $pwd.basename+".pdf" 
    get-childitem *.pdf | rename-item -newname $newname 
    move-item $newname ..\ 
    cd .. 
}