我有很多文件D:\cert
想要删除,但也想保留一些名称中带有特定文本的文件 - 我该如何删除所有*.pdf
文件,但保留*_sign.pdf
所有子文件夹?
20241220cert.pdf
20241220cert_sign.pdf
20241221cert.pdf
20241221cert_sign.pdf
20241222cert.pdf
20241222cert_sign.pdf
运行脚本删除后的示例:
20241220cert_sign.pdf
20241221cert_sign.pdf
20241222cert_sign.pdf
该
IF
命令无法理解用于匹配的通配符。相反,您需要使用子字符串来提取要匹配的部分。如果您将下面的代码粘贴到.CMD
或.BAT
文件中,它应该会执行您要求的操作。我强烈建议将ss64.com加入书签;它是WinBatch、PowerShell、MacOS 上的 bash和Linux 上的 bash的绝佳参考。
尽管这在 WinBatch 中不太难完成,但我倾向于在 PowerShell 中完成,它具有更好的字符串匹配/操作和更强大的管道,允许将其作为“单行”完成:
Get-ChildItem -Recurse *.pdf | Where-Object {$_.Name -NotLike "*_sign*"} | Remove-Item
没有直接命令,但您可以通过将要保存的文件移动到某个地方来轻松完成。登录文件所在的目录后运行此命令。我建议一次运行一个命令,以确保一切按预期运行。
它
请注意,如果从 xtemp 移动时出现问题,
rmdir
则不会删除该目录,因为它不为空。在 powershell 中非常简单。删除 -whatif 即可真正做到这一点。
您可以测试并查看结果以检查它是否符合您的期望。只需删除该
echo/
命令,它将删除测试执行期间列出的文件。在 PowerShell 中,你可以执行相同的操作
-whatif
: