如何用批处理删除文件名特定位置含指定字符串的文件?
解决批处理误删文件的问题:精准匹配扩展名前的指定字符串
你的问题出在通配符的匹配范围太广了——原来的*%_FileNumber%.*会匹配文件名任意位置包含输入字符串的文件,不管这个字符串是在日期部分还是扩展名前的目标位置,所以才会误删。
要实现仅匹配扩展名前位置的指定字符串,我们需要收紧通配符的规则,确保输入的字符串是夹在两个点之间(也就是位于文件名的倒数第二个字段,紧挨着扩展名)。
修改后的代码
@ECHO off TITLE REMOVE FILES @ECHO: SET /p _FileNumber= Enter file number You want to remove: :: 仅匹配包含 .[输入字符串]. 的文件(即扩展名前的位置) del /q /s "C:\Directory1\*.%_FileNumber%.*" del /q /s "C:\Directory2\*.%_FileNumber%.*" PAUSE
代码说明
*.%_FileNumber%.*这个通配符的逻辑是:*:匹配文件名开头的任意字符.%_FileNumber%.:精确匹配一个点 + 用户输入的字符串 + 一个点,确保输入的字符串是独立的字段,且位于扩展名的直接前面*:匹配任意扩展名
这样修改后,当你输入2019时:
- 会被删除的文件:
FILE 2019.03.09.FILE.2019.XXX(因为包含.2019.) - 不会被误删的文件:
FILE2019.03.09.FILE.XXX(2019前面没有点,不满足通配符规则)
额外优化(可选)
如果你的文件名格式是固定的FILE YYYY.MM.DD.FILE.YYYY.XXX,还可以用更精准的通配符进一步缩小范围,把误删概率降到最低:
del /q /s "C:\Directory1\FILE *.FILE.%_FileNumber%.*"
这个规则会匹配开头是FILE 、中间包含.FILE.、接着是输入字符串、最后是扩展名的文件,完全贴合你给出的文件名格式。
内容的提问来源于stack exchange,提问作者mgk
相关产品推荐
相关产品推荐

