Batch file 批处理:将dir/b的输出转换为小写

Batch file 批处理:将dir/b的输出转换为小写,batch-file,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 ) 有解决方法吗?您可以创建一个toUpper函数,并在%%~xa上调用它,然后与.ISO

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

有解决方法吗?

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

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

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

  • 不要使用
    for/f
    迭代
    dir
    输出。除非您正确设置控制台选项,否则它很容易出错并损坏Unicode字符。使用

    for /r %%a in (*) do ...
    
    相反,它也将递归地迭代文件

  • 使用
    /I
    作为
    的选项,如果

    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
    

    您错过了
    -递归
    。而
    ls
    Get ChildItem
    (与
    dir
    )的别名。@Joey:谢谢,添加了参数。关于ls是dir的别名的评论试图将术语保留在OP的
    batch
    世界中。我不想开始为来自batch的smeone命名太多不熟悉的东西。