最近我写了一个简单的BAT文件来删除当前目录及其子目录中所有不必要的* .RES文件:
del /S "*.res"
但它也删除了所有* .RESX文件(哦,我不幸的C#项目......)。
据我所知,它之前将所有文件名转换为DOS 8.3格式,因此任何类似“ Resources.resx ”的文件都将具有DOS 8.3文件名“ resour~1.res “,不幸的是,它将匹配模式”* .res“。
问题:是否有简单的方法可以强制批处理文件考虑完整文件名,不是8.3 文件名?
至少要“说”文件扩展名的长度应该是3个字符。
答案 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