[英]Batch file issue (filenames with long file extension)
最近写了一个简单的BAT文件,删除当前目录及其子目录下所有不需要的*.RES文件:
del /S "*.res"
但它也删除了所有 *.RESX 文件(哦,我倒霉的 C# 项目......)。
我知道它之前将所有文件名转换为 DOS 8.3 格式,因此任何像“ Resources.resx ”这样的文件都将具有 DOS 8.3 文件名“ resour~1.res ”,因此不幸的是它会匹配模式“*.res”。
问题:有没有简单的方法可以强制批处理文件考虑完整的文件名,而不是 8.3文件名?
至少要“说”文件扩展名的长度应该是 3 个字符。
这是因为 cmd.exe 中的dir
由于遗留问题使用FindFirstFile
API。 该 API匹配长名称和 8.3 名称,因此*.res 和 *.resx 将相同
最简单的解决方案是使用powershell
Get-ChildItem *.res -r | Remove-Item
它可以像 cmd 一样调用(这里我用它们的通用别名替换了 cmdlet)
powershell -command "ls *.res -r | del"
纯批处理会比较麻烦
for /f "usebackq delims=|" %%f in (`dir /s /b ^| findstr /i /v /r "\.res.$"`) do del %%f
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.