我在文本文件中有一个文件名列表,如下所示:
f1.txt
f2
f3.jpg
如何从Powershell中的这些文件中删除文件夹中的所有其他内容?
的伪代码:
答案 0 :(得分:16)
数据:
-- 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
向您显示 所做的事情(即不会删除)
-Oisin
答案 1 :(得分:6)
如果文件存在于当前文件夹中,则可以执行以下操作:
Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif
此方法假设每个文件都在一个单独的行上。如果文件存在于子文件夹中,那么我会采用Oisin的方法。
答案 2 :(得分:1)
实际上这似乎只适用于第一个目录而不是递归 - 我改变的脚本正确地进行了递归。
$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