批处理文件问题(具有长文件扩展名的文件名)

时间:2018-02-22 11:03:50

标签: batch-file wildcard filenames short-filenames

最近我写了一个简单的BAT文件来删除当前目录及其子目录中所有不必要的* .RES文件:

del /S  "*.res"

但它也删除了所有* .RESX文件(哦,我不幸的C#项目......)。

据我所知,它之前将所有文件名转换为DOS 8.3格式,因此任何类似“ Resources.resx ”的文件都将具有DOS 8.3文件名“ resour~1.res “,不幸的是,它将匹配模式”* .res“。

问题:是否有简单的方法可以强制批处理文件考虑完整文件名,不是8.3 文件名?

至少要“说”文件扩展名的长度应该是3个字符。

1 个答案:

答案 0 :(得分:1)

这是因为cmd.exe使用的FindFirstFile API matches both long and 8.3 names,因此*.res and *.resx would be the same

最简单的解决方案是使用powershell

dir *.res -r | remove-item

可以从cmd调用

powershell -command "dir *.res -r | remove-item"

纯批次解决方案会更麻烦

for /f "usebackq delims=|" %%f in (`dir /s /b ^| findstr /i /v /r "\.res.$"`) do echo del %%f