从目录开始,我想:
这是我尝试通过DOS批处理文件:
for /r . %%g in (*.pm) do (
SET FILEPATH=??
SET FILENAME=??
SET CURRENT="%cd%"
cd %FILEPATH%
perl Perl_Script.pl %FILENAME%
cd "%CURRENT"
)
FILEPATH和FILENAME应该设置为什么?
根据Jakub的回答,我将程序修改为:
for /r . %%g in (*.pm) do (
SET FILEPATH="%%~pg"
SET FILENAME="%%~g"
SET CURRENT="%cd%"
cd %FILEPATH%
perl Perl_Script.pl %FILENAME%
cd %CURRENT%
)
我可以从日志中看出FILENAME和FILEPATH正在接收正确的值,但是对于sime不可思议的原因,%FILEPATH%和%FILENAME%总是会被设置为FIRST分配给这些变量的值。
谷歌搜索几个小时后,我意识到这是一个delaye扩展概念。最后(经过艰苦的决斗之后),它终于归结为:
setlocal enabledelayedexpansion
for /r . %%g in (*.pm) do (
SET FILEPATH="%%~pg"
SET FILENAME="%%~g"
SET CURRENT="%cd%"
cd !FILEPATH!
perl Perl_Script.pl !FILENAME!
cd %CURRENT%
)
endlocal
像魅力一样工作!!!