1

与 /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
)

有解决方法吗?

4

3 回答 3

2

dir /l当然对我有用,即使是你在那里给的开关组合。但即使没有,也有两件简单的事情:

  1. 不要for /f用于迭代dir输出。除非您正确设置控制台选项,否则它很容易出错并且会破坏 Unicode 字符。采用

    for /r %%a in (*) do ...
    

    相反,它也会递归地遍历文件。

  2. 用作/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
于 2012-04-23T19:07:06.960 回答
1

您可以创建一个 toUpper 函数并在 %%~xa 上调用它,然后与 .ISO 或 .BIN 进行比较。这是一个参考。

于 2012-04-23T18:56:08.400 回答
0

现代 Windows 具有 powershell。PS 中的单行代码是: ls * -recurse -include *.iso,*.bin,它将忽略文件名的大小写。(ls是 的别名dir)[见 Joey 的评论]

于 2012-04-23T19:04:09.707 回答