2014-09-26 97 views
0

我使用下面的代碼來獲取文件的FileDescription:Powershell - 刪除包含具有特定FileDescription的文件的文件夾?

(dir C:\test.exe).VersionInfo | select-object FileDescription | fl 

這工作正常,接下來的步驟是:我期待搜索以特定FileDescription結尾的所有文件,然後刪除這些文件所在的文件夾。這可能嗎?謝謝!

+2

'(dir C:\ test.exe).VersionInfo | Where-Object {$ _。FileDescription-like「* endofdescription」} |刪除項目 - 什麼如果。猜測會有某種ForEach-Object循環,輸出來自Get-ChildItem調用 – Matt 2014-09-26 12:17:26

+0

謝謝!刪除項目部分出現問題,得到「刪除項目:無法找到驅動器,名稱爲'文件'的驅動器不存在。」 – user2953714 2014-09-26 12:30:27

回答

0

我的管道發生錯誤。文件信息丟失,因爲我們只管.VersionInfo

Get-ChildItem C:\test.exe | Where-Object{$_.VersionInfo.FileDescription -like "*endofdescription"} | Remove-Item -WhatIf 

如果你使用-Recurse返回多個文件,並繼續使用Where-Object,只過濾出你想要的那些它會更有意義。這應該找到這些文件並返回它們的文件夾名稱。由於文件夾中可能有多個文件匹配,我們可以通過管道Select-Object -Unique中的結果來獲取單個文件夾。

Get-ChildItem C:\MyFolder -Recurse | Where-Object{$_.VersionInfo.FileDescription -like "*endofdescription"} | ForEach-Object{Split-Path $_.FullName -Parent} | Select-Object -Unique | ForEach-Object{Remove-Item $_ -WhatIf -Confirm:$false -Force -Recurse} 

作爲預防措施,我離開-WhatIf。如果代碼適合您的需求,請刪除。

+0

這可以工作,但會刪除文件,而不是文件所在的文件夾。有沒有辦法解決這個問題?謝謝! – user2953714 2014-09-26 13:30:38

+0

@ user2953714我已更新我的文章以獲得基於文件夾的解決方案。 – Matt 2014-09-26 13:56:44

+0

謝謝! Theres打開一個確認對話框,是否有辦法抑制? – user2953714 2014-09-26 14:16:17

0

這是行不通的?

Get-ChildItem C:\MyFolder -Recurse | ` 
Where-Object{$_.VersionInfo.FileDescription -like "*endofdescription"} |` 
%{$_.DirectoryName}|` 
sort-object -unique| ` 
remove-item -recurse -whatif 
相關問題