[英]BATCH: Convert output of dir /b to lowercase
与/ 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
)
这有解决方法吗?
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
您可以创建一个toUpper函数并在%% ~xa上调用它,然后与.ISO或.BIN进行比较。 这是一个参考。
现代Windows有powershell。 PS中的单行将是: ls * -recurse -include *.iso,*.bin
,这将忽略文件名的情况。 ( ls
是dir
的别名)[见Joey的评论]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.