繁体   English   中英

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

[英]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对我来说当然很有用,即使是你在那里的开关组合。 但即使没有,也有两件简单的事情:

  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

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

现代Windows有powershell。 PS中的单行将是: ls * -recurse -include *.iso,*.bin ,这将忽略文件名的情况。 lsdir的别名)[见Joey的评论]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM