![删除非标准文件名的文件列表](https://linux22.com/image/1603390/%E5%88%A0%E9%99%A4%E9%9D%9E%E6%A0%87%E5%87%86%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8.png)
我最近不得不从坏的硬盘中拯救文件,现在正在清理这些乱七八糟的东西。目前,我正在使用重复清理程序删除任何在备份中有重复项的恢复文件。我正在比较内容,而不是文件名,因为文件名大多是由救援程序生成的。
不幸的是,我需要删除的一些文件的文件名包含各种字符,例如 %、@、; 和其他导致问题的内容。我的 dupechecker 在尝试删除文件时卡住了,几个小时都没有找到要删除的项目。
于是我导出了要删除的文件列表,然后使用 Powershell 删除它们。它删除了一些文件,但当遇到文件名中的破坏性字符时,它很快就失败了。
我的 Powershell 命令:
Get-Content d:\dupelist3.txt | Remove-Item
文件列表的摘录(添加了 CR 以提高可读性):
G:\HE12 #2 恢复 EaseUS\恢复的数据 09-06 09_23_00\1 HE12 2 (F) NTFS\其他丢失文件---[100%]--[所有文件-CRC-OK]--[16 个文件]-
“G:\HE12 #2 恢复 EaseUS\恢复的数据 09-06 09_23_00\1 HE12 2 (F) NTFS\其他丢失的文件\FTP_SERVER.LOG;6”
“G:\HE12 #2 恢复 EaseUS\恢复的数据 09-06 09_23_00\1 HE12 2 (F) NTFS\其他丢失的文件\GOPHER.$5516417292;1”
“G:\HE12 #2 恢复 EaseUS\恢复的数据 09-06 09_23_00\1 HE12 2 (F) NTFS\其他丢失的文件\GOPHERRC.;1”
G:\HE12 #2 恢复 EaseUS\恢复的数据 09-06 09_23_00\1 HE12 2 (F) NTFS\其他丢失的文件\listener[1].htm
“G:\HE12 #2 恢复 EaseUS\恢复的数据 09-06 09_23_00\1 HE12 2 (F) NTFS\其他丢失的文件\TELNET.LOG;1”
文件列表最初是一个 csv 文件,我使用 Excel 处理它,只从我的 dupechecker 导出中提取路径和文件名。因此,在从 Excel 导出(制表符分隔)文本文件时,一些文件引用被封装在双引号中。我注意到,本文中上述列表中的第一个项目表示错误,因为在“其他丢失的文件”之后和后面三个破折号之前应该有一个反斜杠。我想这在某种程度上说明了这个问题 :)
所以我的问题是:鉴于手头的复杂情况,我该如何删除列表中的所有文件?手动操作行不通,因为列表中有 100k+ 个文件,而且我有多个列表。
只要能够完成工作,我愿意使用其他工具......
此致,
施泰纳
答案1
你可以尝试
Get-Content d:\dupelist3.txt | % {Remove-Item -LiteralPath $_ -WhatIf}
删除 -WhatIf 才能实际执行
从除去项目
-LiteralPath 指定一个或多个位置的路径。LiteralPath 的值按输入的方式使用。没有字符被解释为通配符。如果路径包含转义字符,请将其括在单引号中。单引号告诉 PowerShell 不要将任何字符解释为转义序列
答案2
如果您可以使用通配符来攻击它,您可能会发现这很有用。用一些非常奇怪的字符进行了测试,似乎都有效。我添加了 Set-Location 以避免在错误的文件夹中运行。准备好黄金时段时删除 -WhatIf。
Set-Location 'D:\Trashcan' $junk = '*.@@@', '*;*', 'trash[0-9].log' $files = get-childitem * -include $junk -recurse $files | Remove-Item -WhatIf $files.count
我使用类似的脚本来清理一组经常收集我不想要的文件的文件夹。