BATCH:将dir / b的输出转换为小写

时间:2012-04-23 18:53:25

标签: batch-file

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

有解决方法吗?

3 个答案:

答案 0 :(得分:2)

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

  1. 请勿使用for /f来迭代dir输出。除非正确设置控制台选项,否则它容易出错且会破坏Unicode字符。使用

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

    相反,它也将以递归方式迭代文件。

  2. 使用/I作为if的选项:

    if /i "%%~xa" EQU ".iso" ...
    
  3. 最后,为什么不采取简单的路线:

    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,这将忽略文件名的情况。 (lsdir)的别名[请参阅Joey的评论]