【问题标题】:Delete multiple files using powershell and a .txt file使用 powershell 和 .txt 文件删除多个文件
【发布时间】:2018-01-05 15:54:42
【问题描述】:

我有一个 .txt,其中包含我要删除的 1000 多个文件的名称。我的 .txt 文件没有文件路径。我要删除的文件分布在多个文件夹中,但它们都在同一个驱动器中。有没有办法使用 powershell 或命令提示符来搜索我的驱动器中与我的 .txt 文件中列出的名称相同的所有文件并删除它们?

【问题讨论】:

  • 是的,这是可能的,到目前为止你尝试过什么?
  • superuser.com/questions/355584/…。我试着按照这里的所有想法,我可以让命令运行,但什么都不会删除。我是这个东西的新手,知识很少。
  • 考虑看看这里Recursive file search using Powershell。当您成功地弄清楚如何递归搜索驱动器的文件夹时,然后基于该技能并开始检查文本文件中包含的文件名(尝试填充数组)。如果您认为自己做对了,请将它们复制到单个位置或将完整文件路径写入文本文件(验证),当看起来正确时,不要复制它们,而是删除它们。这将允许您一路测试。
  • 此外,考虑到您的最终目标,选择更窄的文件夹路径进行测试是明智的。如果你弄错了,删除的次数超出了你的预期,那将是一个很大的问题。
  • 我最终编写了一个命令,首先从我的文件名中删除所有方括号,这就成功了。谢谢。

标签: powershell


【解决方案1】:

假设您的 PowerShell 提示当前设置在您要开始搜索的根位置,并且文件位于同一目录中:

gc .\MyListOfFilesIWantToDelete.txt | %{gci $_ -Recurse | Remove-Item -WhatIf}

注意,您必须删除 -whatif

或者,假设您的文件位于您打开 PowerShell 的其他位置(例如:~/Documents),并且您想要扫描 D: 驱动器。这应该有效:

gc .\MyListOfFilesIWantToDelete.txt | %{gci D:\ -Filter $_ -Recurse -ErrorAction SilentlyContinue | Remove-Item -WhatIf}

注意我把 SilentlyContinue。这是因为如果您无权访问搜索路径中的文件夹,您会看到很多红色。

或者,您可以使用文件列表加载一个变量..

$thesefiles = gc .\mylistoffilesiwanttodelete.txt

.. 并直接使用 Remove-Item cmdlet..

Remove-Item -Path D:\Folder -Include $thesefiles -Recurse -WhatIf

或者在不加载变量的情况下一举:

Remove-Item -Path D:\Folder -Include $(gc .\mylistoffilesiwanttodelete.txt) -Recurse -WhatIf

我再次使用 -WhatIf 进行测试。此外,我注意到过去在不同版本的 PowerShell 上使用 get-childitem 的不同行为。我用 5.1 测试了这些

【讨论】:

  • 此解决方案仅适用于文本文件中存在文件扩展名的情况。例如。 file1.txt, file2.pdf
  • 我在任何地方都看不到这是这​​种情况。唯一提到的是文件的路径不包含在他的文本文件中
【解决方案2】:

从以下 powershell 命令更改目录

以下命令将允许您删除特定目录中的 .txt 文件

Get-ChildItem C:\*.txt -file -r | remove-item

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2021-11-01
    • 2021-03-04
    相关资源
    最近更新 更多