@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
批处理命令中的尾随空格会导致混乱。