我有一个问题,似乎如何删除名称中包含指定文本的文件?会删除我不想删除的内容。
由于在安装额外的内部硬盘并按照Microsoft 支持中的说明移动 OneDrive 文件夹后出现 OneDrive 问题,我不知道我做错了什么,但现在我已将所有文件复制到新硬盘并且 OneDrive 正在同步每个文件的重复项位于 - copy
每个文件名末尾的扩展名之前。这是数千个文件中千兆字节的数据。
当查看在 Powershell 或 cmd.exe 中使用时会删除的内容时*- copy.*
,似乎我创建的文件 (copy.bat) 将被删除,而我想保留该文件。
如何使用通配符删除- copy
文件名末尾的所有内容,但保护 copy.bat 等文件?
目前发生的情况是 your
*- copy.*
被解析为两个空格分隔的参数:*-
和copy.*
。一旦您看到这一点,就很容易认识到其中第二个将与您的copy.bat
文件匹配。解决方法是将不变部分用双引号括起来(具体来说,确保空格位于双引号内)
*"- copy".*
::由于这是 Windows,您实际上也可以不用引用
*
,因为它是由命令而不是 Powershell/CMD 工具解析的:顺便说一句,如果您打算使用基于 UNIX/Linux 的系统(包括 Mac),请不要养成尝试引用通配符并期望它充当模式的习惯,因为它不会t:它将被解析为字面星号。我的第一个建议在任何地方都适用。第二个建议是特定于 Windows 的。
该
.bat
文件不需要与要删除的文件位于同一文件夹中。您可以通过运行从另一个文件夹运行它\path\copy.bat
。如果还有更多文件受到影响
copy.bat
,则需要在运行之前将它们复制到其他地方copy.bat
。您还可以在 PowerShell 中使用比 CMD 中可用的原始表达式更复杂的正则表达式。如果您可以更好地定义它们的命名规则,那么您可以优化正则表达式以包含更少的文件。
看看一个有用的免费工具 - 批量重命名实用程序。https://www.bulkrenameutility.co.uk
它可以递归扫描和预览批量重命名任务,并且非常有用,因为它具有预览功能。请注意 - 您必须先进行备份。这是一个强大的工具,提交后没有任何撤消选项。