循环访问扩展名为 [批处理] .jar的文件



所以,我有一些代码,理论上可以工作,但它没有。它循环访问某些文件,但不是全部,但不是我希望它循环访问的特定文件类型 (.jar)

我得到了:

for /r %%f in (*.jar) do (
    ECHO path=%%~pf
    ECHO filename=%%~nf
    ECHO fileextension=%%~xf
    SET fileextension=%%~xi
    IF "%fileextension%" == ".jar" (
        call proc %%f
    )
)

更改

IF "%fileextension%" == ".jar" (

IF /i "%%~xf" == ".jar" (

三个问题:

1)文件名是%%f,而不是%%i

2)在块语句(a parenthesised series of statements)中,整个块被解析然后执行。块内的任何%var%都将在解析块时(在块执行之前)替换为该变量的值,同样的事情适用于FOR ... DO (block)

在块语句(a parenthesised series of statements)中,应该使用REM语句而不是破标签备注形式(:: comment),因为标签会终止块,混淆cmd

因此,IF (something) else (somethingelse)将使用遇到IF%variables%的值执行。

克服此问题的两种常见方法是 1) 使用 setlocal enabledelayedexpansion 并使用 !var! 代替 %var% 来访问更改的值 var 或 2) 调用子例程以使用更改的值执行进一步处理。

2)您可能需要if /i才能使if语句不区分大小写,因为文件扩展名匹配但大小写不同。

最新更新