沒有指定文件,我有一個文件名列表在這樣的文本文件:PowerShell腳本刪除列表中的
f1.txt
f2
f3.jpg
如何刪除一個文件夾中的一切,除了在PowerShell中這些文件?
僞代碼:
- 閱讀文本文件中的行由行
- 創建的文件名列表
- 遞歸文件夾及其子文件夾
- 如果文件名不是在列表中,刪除它。
沒有指定文件,我有一個文件名列表在這樣的文本文件:PowerShell腳本刪除列表中的
f1.txt
f2
f3.jpg
如何刪除一個文件夾中的一切,除了在PowerShell中這些文件?
僞代碼:
數據:
-- begin exclusions.txt --
a.txt
b.txt
c.txt
-- end --
代碼:
# read all exclusions into a string array
$exclusions = Get-Content .\exclusions.txt
dir -rec *.* | Where-Object {
$exclusions -notcontains $_.name } | `
Remove-Item -WhatIf
取出-WhatIf
開關,如果你滿意你的結果。 -WhatIf
顯示你什麼會 DO(即它不會刪除)
-Oisin
如果在當前文件夾中的文件,那麼你可以這樣做:
Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif
這種方法假設每個文件都在一個單獨的行上。如果這些文件存在於子文件夾中,那麼我會採用Oisin的方法。
是的,文件分開。感謝您的答案。 如果父位置具有子文件夾,我得到一個提示說「在該項目Microsoft.PowerShell.Core \ FileSystem的:: <
如果子目錄都參與,那麼你做*不*想用我的方法,你不希望使用-r否則會刪除整個文件夾。 – 2010-01-06 16:22:44
其實這似乎只爲第一個目錄的工作,而不是在遞歸 - 我改變劇本遞歸正常。
$exclusions = Get-Content .\exclusions.txt
dir -rec | where-object {-not($exclusions -contains [io.path]::GetFileName($_))} | `
where-object {-not($_ -is [system.IO.directoryInfo])} | remove-item -whatif
我用$ _。FullName.ToLower()代替[io.path] ::用GetFileName($ _),並在我的排除列表中使用的全路徑名,以獲得遞歸工作。 – toxaq 2011-10-06 09:44:31
我喜歡它。但是,爲什麼不使用-notcontains? – 2010-01-06 01:32:38
謝謝。這對我來說非常合適。正如Mike所建議的那樣,我嘗試使用-notcontains,結果是一樣的。 – Mrchief 2010-01-06 16:01:29
我討厭-notcontains。不,只是在開玩笑。是的,這是有史以來。 – x0n 2010-01-07 00:15:42