使用批处理脚本检查文件夹中是否存在特定文件扩展名的文件

4

我想使用批处理脚本检查文件夹中的特定文件扩展名。

就像这样:

if exist <any file with extension .elf>
  do something
else
  do something else

这里的文件名可以是任何东西,但只有扩展名(.elf)很重要。


如果应该像这样 **if exist *.elf do ( file exist - do something )**,你应该使用 do 关键字。 - Mȍhǟmmǟd Șamȋm
2个回答

7
在最简单的情况下,批处理语言包括一个用于此任务的结构。
if exist *.elf (
    :: file exists - do something 
) else (
    :: file does not exist - do something else
)

if exist 命令用于测试当前目录或指定文件夹中是否存在与指定名称/通配符表达式匹配的元素。

虽然在这种情况下似乎不需要其他内容,但应考虑到 if exist 命令没有区分文件和文件夹。如果使用的名称/通配符表达式匹配到一个文件夹名称,if exist 也会评估为 true。

如何确保我们正在测试一个文件?最简单的解决方案是使用 dir 命令搜索文件(排除文件夹)。如果失败(引发错误级别),则没有符合条件的文件。

dir /a-d *.elf >nul 2>&1 
if errorlevel 1 (
    :: file does not exist - do something
) else (
    :: file exists - do something else
)

或者,使用条件执行(以上代码的简短缩写)。
dir /a-d *.elf >nul 2>&1 && (
    :: file does exist - do something
) || ( 
    :: file does not exist - do something else 
)

它的功能是执行一个查找 "*.elf" 的 "dir" 命令,排除文件夹("/a-d")并将所有输出发送到 "nul" 设备,即丢弃输出。如果增加了 errorlevel,则表示没有找到匹配的文件。

如果应该像这样编写程序:if存在.elf则执行(文件存在-执行某些操作)*,那么您应该使用关键字do - Mȍhǟmmǟd Șamȋm
@MȍhǟmmǟdȘamȋm,不应该。在批处理文件中,“for”命令需要“do”子句,但“if”命令语法不包括“do”子句。 - MC ND
如果存在*.elf,那么这对我来说很好用。在我的情况下,如果没有do,if就不起作用。 - Mȍhǟmmǟd Șamȋm

2

就像你想象的那么简单:

if exist *.elf echo yes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接