所以,我有一些代码,理论上可以工作,但它没有。它循环访问某些文件,但不是全部,但不是我希望它循环访问的特定文件类型 (.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
语句不区分大小写,因为文件扩展名匹配但大小写不同。