@ECHO OFF
SETLOCAL enabledelayedexpansion
::
:: establish target directory
:: initialise PREFIX to a name that's invalid in a filename
::
SET target=.
SET prefix=:
FOR /f "tokens=1*delims=_" %%i IN (
'dir /b/a-d/o-n "%target%\*_*.xml'
) DO (
IF !prefix!==%%i ECHO DEL "%target%\%%i_%%j"
SET prefix=%%i
)
此解决方案依赖于目标目录中 *xml 文件的名称中是否存在“_”。我在批处理开发目录中的一些虚拟文件上对其进行了测试,因此我.
用于the current directory
DIR 命令生成目标目录中与模式匹配的文件列表。*_*.xml
开关/b
表示filename only
,/a-d
表示no directory names, even if they match
和/o-n
表示in the reverse order of name
因此,名称将出现在第一个之后的部分的最高数值_
。
FOR 读取此输出并将文件名的前缀%%i
和其余部分分配给%%j
由于prefix
被初始化为文件名中的无效字符,它不可能匹配%%i
遇到的第一个文件,因此DEL
不会执行。然后将存储最后遇到的前缀。仅当下一个文件名具有匹配的前缀时才会DEL
执行
请注意,我ECHO
在DEL
. 这是万一发生错误时的安全装置。PROPOSEDDEL
操作将报告到屏幕上,而不是 EXECUTED。一旦您对批次正确感到满意,请移除 ,ECHO
然后删除操作将继续。
观察点:
- 一些编辑在去除或保留尾随空格方面相当随意。通常,这是无害的,但
SET
批处理命令中的尾随空格会导致混乱。