Batch file 批处理:将dir/b的输出转换为小写
与/b选项(裸格式)一起使用时,“dir”命令似乎无法识别/l(小写)选项。 我正在尝试获取目录中文件的扩展名,但我无法剥离该案例,这使得以下代码对于扩展名中包含大写字符的所有文件都无效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
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命名太多不熟悉的东西。