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