所以,我有一些代码,这在理论上可行,但它并没有...... 它遍历一些文件,但不是全部,但不是我希望它循环的特定文件类型(.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
)
)
答案 0 :(得分:2)
变化
IF "%fileextension%" == ".jar" (
到
IF /i "%%~xf" == ".jar" (
三个问题:
1)文件名位于%%f
,而不是%%i
2)在块语句(a parenthesised series of statements)
中,解析整个块,然后执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}
在块语句FOR ... DO (block)
中,应使用(a parenthesised series of statements)
语句而不是断标签注释表单(REM
),因为标签终止块,使:: comment
混淆。< / p>
因此,cmd
将在遇到IF (something) else (somethingelse)
时使用%variables%
的值执行。
解决此问题的两种常见方法是1)使用IF
并使用setlocal enabledelayedexpansion
代替!var!
来访问已更改的%var%
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。
2)对于文件扩展名匹配但情况不同的情况,您可能需要var
使if /i
语句不区分大小写。