2017-03-31 52 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倍,哈希值保存到變量重用:

$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

到@BenH我建議只獲得文件和散列一次,但通過沒有理由循環類似整件事4次。只需將所有四個命令放在一個ForEach循環中即可。

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 
} 
相關問題