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

Mrc*_*ief 11 powershell file list delete-file

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

f1.txt
f2
f3.jpg
Run Code Online (Sandbox Code Playgroud)

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

伪代码:

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

x0n*_*x0n 17

数据:

-- begin exclusions.txt --
a.txt
b.txt
c.txt
-- end --
Run Code Online (Sandbox Code Playgroud)

码:

# read all exclusions into a string array
$exclusions = Get-Content .\exclusions.txt

dir -rec *.* | Where-Object {
   $exclusions -notcontains $_.name } | `
   Remove-Item -WhatIf
Run Code Online (Sandbox Code Playgroud)

-WhatIf如果您对结果满意,请取下开关.-WhatIf告诉你它做什么(即它不会删除)

-Oisin

  • 我喜欢.为什么不使用-notcontains? (3认同)

Kei*_*ill 6

如果文件存在于当前文件夹中,则可以执行以下操作:

Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif
Run Code Online (Sandbox Code Playgroud)

此方法假定每个文件都在一个单独的行上.如果文件存在于子文件夹中,那么我会选择Oisin的方法.

  • 如果涉及子目录,那么你*不*想要使用我的方法而你不想使用-r否则它会删除整个文件夹. (3认同)