【发布时间】:2021-12-10 09:18:56
【问题描述】:
我想写一个简单的行来列出具有给定扩展名的文件夹中的所有文件。这是我尝试过的:
FOR %I IN (.\*) DO IF %~NXI == *.asm @ECHO %~I
不幸的是,这不起作用!
问题似乎与* 通配符有关,因为当更改为:
FOR %I IN (.\*) DO IF %~NXI == r_draw16.asm @ECHO %~I
它确实有效 - 按预期输出 .\r_draw16.asm!
我的问题是为什么使用通配符的解决方案不起作用并且需要纠正它来完成这项工作?
【问题讨论】:
-
既然您正在寻找
asm文件,为什么不直接使用扩展名呢?FOR %I IN (.\*) DO @IF /I "%~xI" == ".asm" ECHO %~I。在批处理文件中,您必须将%字符加倍,即@FOR %%I IN (.\*) DO @IF /I "%%~xI" == ".asm" ECHO %%~I。然而,使用@FOR %%I IN (.\*.asm) DO @ECHO %%~I会更简单。如果您打开命令提示符窗口,输入for /?并按下[ENTER]键,您应该会看到所有可用的修饰符。 -
IF比较是字符串文字,除非您比较的是整数。没有任何形式的正则表达式可以与IF命令进行比较。FINDSTR命令确实具有有限的正则表达式功能。 -
dir *.asm /A-D /B怎么样?打开command prompt,运行dir /?并阅读输出帮助。最好运行一次for /?和if /?和echo /?以及命令help以显示Windows commands 的(不完整)列表,也由SS64.com - A-Z index of Windows CMD commands 解释。
标签: windows batch-file