批处理文件删除额外文件
Posted
技术标签:
【中文标题】批处理文件删除额外文件【英文标题】:Batch File Deleting extra files 【发布时间】:2021-09-18 03:05:20 【问题描述】:我们的编程档案包含大量 PLC 程序(数千个文件)
正在重建我们的备份结构,并希望过滤掉一些垃圾。制作了一个批处理文件以删除所有包含扩展名为 .acd 的 BAK 的文件夹、所有具有 .SEM 和 .WRK 的文件,因为这三个是打开程序时创建的额外文件,不需要。有些已被复制到档案中并重复了很多次。
我在文件夹的副本上对其进行了测试,并希望在将结构复制到其他备份系统之前定期运行它,以防止备份再次变得混乱。
这是我使用的脚本:
del /q /s "Y:\Bays\*BAK*.acd"
del /q /s "Y:\Bays\*.Sem*"
del /q /s "Y:\Bays\*.Wrk*"
它删除了数以千计的文件,但在我观察的过程中,我注意到其中三个对我来说没有意义。
查看中间两个被删除的文件:
“带有电子邮件”文件:
这三个已被删除,但名称中不包含 BAK。如果它会冒险删除不是自动生成的程序的任何副本,我不想定期运行它。只是希望有人能够解释为什么这三个是数千个已删除文件中唯一不遵守规则的。
【问题讨论】:
输入dir /S /X "Y:\Bays\*BAK*.acd" | findstr /I "BAK[^\\]*\.acd$"
并发布输出;也许 8.3 的短文件名与指定的模式匹配……
【参考方案1】:
Volume 具有启用生成短文件名的属性 (8.3)。 该属性影响命令(del、for)的执行。
我有卷 D,其中 8dot3 名称创建被禁用 文件夹中有一个名为 1.abcd 的文件。 命令 for %i in (*.abc) do echo %i 找不到任何文件
我有卷 C,其中启用了 8dot3 名称创建 文件夹中有一个同名的文件 1.abcd。 命令for %i in (*.abc) do echo %i 找到这个文件
也许如果您使用长文件名,那么您需要禁用生成短文件名。你可以用fsutil来做。
【讨论】:
【参考方案2】:如您所知,批处理无法从单词之间有空格的目录中删除文件。这实际上是一个无法修复的错误,并且不是内置的。所以,我认为这是因为未知的文件扩展名,它发生在我身上。要让您的设备知道它,请在搜索栏中键入 regedit,转到 HKEY_CLASSES_ROOT,添加一个新密钥,并将其命名为扩展名。关闭注册表并重试。
【讨论】:
很高兴知道!谢谢。有用的信息。但是,我想知道的文件不是为什么没有删除某些内容,而是为什么删除了它。正如我所说的三个名称中不包含 BAK。它们的扩展名是 .ACD,文件本身的名称中包含下划线,而不是空格。 我刚刚创建了一个目录,其名称包含一个空格,在其中创建了一个文件,然后返回父目录并从那里删除了该文件。因此可以从目录名称中删除带有空格的文件。以上是关于批处理文件删除额外文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 批处理文件中将输入管道输入到 Plink 会添加额外的换行符