与/ b选项(裸格式)一起使用时似乎'dir'命令无法识别/ l(小写)选项。 我正在尝试在目录中获取文件的扩展名,但是我无法剥离案例,使得以下代码对于扩展名中包含大写字符的所有文件都无用。
for /f "delims=" %%a in ('dir /l /b/a-d /s') do (
if "%%~xa"==".iso" echo %%~xa
if "%%~xa"==".bin" echo %%~xa
)
有解决方法吗?
答案 0 :(得分:2)
dir /l
对我来说当然有用,即使是你在那里给出的开关组合。但即使没有,也有两件简单的事情:
请勿使用for /f
来迭代dir
输出。除非正确设置控制台选项,否则它容易出错且会破坏Unicode字符。使用
for /r %%a in (*) do ...
相反,它也将以递归方式迭代文件。
使用/I
作为if
的选项:
if /i "%%~xa" EQU ".iso" ...
最后,为什么不采取简单的路线:
for /r %%a in (*.iso *.bin) do ...
无论如何都有效:
H:.
│ x
│
├───a
│ xyz.bin
│ xyz.ISO
│
└───b
abc.BIN
abc.iso
H:\Stuff>for /r %x in (*.iso *.bin) do @echo %x
H:\Stuff\a\xyz.ISO
H:\Stuff\a\xyz.bin
H:\Stuff\b\abc.iso
H:\Stuff\b\abc.BIN
答案 1 :(得分:1)
您可以创建一个toUpper函数并在%% ~xa上调用它,然后与.ISO或.BIN进行比较。 Here's参考。
答案 2 :(得分:0)
现代Windows有PowerShell。 PS中的单行将是:ls * -recurse -include *.iso,*.bin
,这将忽略文件名的情况。 (ls
是dir
)的别名[请参阅Joey的评论]