2017-03-31 1 views
0

Powershell v4.0을 사용하여 일부 중복 파일을 드라이브에서 제거하고 일부 보고서를 생성합니다. 우리는 중복 된 파일을 삭제할 것이라는 점에 아무도 신경 쓰지 않을 것입니다.하지만 파일을 삭제하면 파일을 원래 위치로 복원 할 수 있습니다.단일 Powershell 명령에서 File-Out 및 del의 여러 함수를 사용하는 방법은 무엇입니까?

모든 중복을 보여주는 보고서를 만듭니다. 내가 보관할 모든 파일에 대한 보고서를 만듭니다. 지울 모든 파일에 대한 보고서를 만듭니다. 그리고 마침내 실제로 삭제 작업을합니다. 나는하겠습니다

ls *.*| Get-FileHash | group -Property hash | where { $_.count -gt 1 } | % { $_.group | select } | Out-File "c:\users\me\desktop\duplicatelist.txt" 

두 번째 명령은 모든 파일의 보고서를 얻을 수 있습니다 :

ls *.*| Get-FileHash | group -Property hash | where { $_.count -gt 1 } | % { $_.group[0] | select } | Out-File "c:\users\me\desktop\keep.txt" 

첫 번째 명령은 내가 가진 모든 중복 파일에 대한 보고서를 얻을 수 있습니다

ls *.*| Get-FileHash | group -Property hash | where { $_.count -gt 1 } | % { $_.group | select -skip 1} | Out-File "c:\users\me\desktop\delete.txt" 

네 번째 명령이다 :

세 번째 명령은 내가 지울거야 모든 파일에 대한 보고서를 얻을 수 있습니다 모든 중복 파일을 삭제하십시오 :

ls *.*| Get-FileHash | group -Property hash | where { $_.count -gt 1 } | % { $_.group | select -skip 1} | del 

여러 명령을 결합 할 수 있습니까? 명령을 반복 할 때마다 8 시간 30 분이 걸리기 때문에 4 번 실행하면 큰 해결책이 아닌 것 같습니다.

최소한 내가 삭제할 내용을 인쇄하고 같은 단계에서 파일을 삭제하는 것이 좋은 단계가 될 것입니다.

답변

2

오히려 4 번 해싱보다, 재사용 변수에 해시를 저장합니다

내가 파일 만 받고 한 번 해싱,하지만 이유는 통해 ​​루프가 없습니다 좋을 것 @BenH 유사
$groupedhashes = ls *.*| Get-FileHash | group -Property hash | where { $_.count -gt 1 } 

$groupedhashes | % { $_.group | select } | Out-File "c:\users\me\desktop\duplicatelist.txt" 
$groupedhashes | % { $_.group[0] | select } | Out-File "c:\users\me\desktop\keep.txt" 
$groupedhashes | % { $_.group | select -skip 1} | Out-File "c:\users\me\desktop\delete.txt" 
$groupedhashes | % { $_.group | select -skip 1} | del 
2

전부 4 번. 네 개의 모든 명령을 하나의 루프에 넣으십시오.

ls *.*| Get-FileHash | group -Property hash | where { $_.count -gt 1 } | % { 
    $_.group | Out-File "c:\users\me\desktop\duplicatelist.txt" 
    $_.group[0] | Out-File "c:\users\me\desktop\keep.txt" 
    $_.group | select -skip 1 | Out-File "c:\users\me\desktop\delete.txt" 
    $_.group | select -skip 1 | del 
} 

편집 :가 더 나은 아직, Tee-Object와 마지막 두 명령을 결합이 때문에이에 나오는 :

ls *.*| Get-FileHash | group -Property hash | where { $_.count -gt 1 } | % { 
    $_.group | Out-File "c:\users\me\desktop\duplicatelist.txt" 
    $_.group[0] | Out-File "c:\users\me\desktop\keep.txt" 
    $_.group | select -skip 1 | Tee-Object -FilePath "c:\users\me\desktop\delete.txt" -Append | del 
}