Powershell脚本,用于删除列表中未指定的文件

时间:2010-01-05 23:32:24

标签: list file powershell delete-file

我在文本文件中有一个文件名列表,如下所示:

f1.txt
f2
f3.jpg

如何从Powershell中的这些文件中删除文件夹中的所有其他内容?

的伪代码:

  • 逐行阅读文本文件
  • 创建文件名列表
  • 递归文件夹及其子文件夹
  • 如果文件名不在列表中,请将其删除。

3 个答案:

答案 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