与 /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
)
有解决方法吗?
与 /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 的评论]