.BAT 文件中的 %0 不正确
Incorrect %0 in a .BAT file
我刚刚注意到 %0
在通过 %PATH%
.
调用的 .bat
文件中有一个非常奇怪的行为
在 %PATH%
的某处,(例如,C:\InPath
),创建文件 xxx.bat
包含:
@echo off
echo this = %~f0
在另一个目录中,不在 %PATH%
、(例如 C:\NotInPath
) 中,创建文件 yyy.bat
包含:
@echo off
call "xxx.bat"
将工作目录更改为任何内容(例如 C:\SomewhereElse
)和 运行 yyy.bat
。我希望看到的是:
this = C:\InPath\xxx.bat
我实际得到的是:
this = C:\SomewhereElse\xxx.bat
问题显然是由 call
中的引号引起的,因为如果我将 yyy.bat
中的 call
行更改为 call xxx.bat
,我会得到预期的输出.
我想知道造成这种行为差异的原因是什么,如果我可以做些什么来获得正确的输出,即使使用引号 - 例如方便包含 space 字符的脚本。在不执行 cmd.exe
的新实例的情况下,即 - 我需要被调用的脚本来设置一些环境值以供调用者脚本读取 .
您可以使用
修复它
@echo off
echo This can be wrong %~f0
call :fixIt
exit /b
:fixIt
echo FixIt %~f0
Link 到 MC ND
的一个很好的解释
SO:What is the reason for batch file path referenced with %~dp0 sometimes changes on changing directory?
我刚刚注意到 %0
在通过 %PATH%
.
.bat
文件中有一个非常奇怪的行为
在 %PATH%
的某处,(例如,C:\InPath
),创建文件 xxx.bat
包含:
@echo off
echo this = %~f0
在另一个目录中,不在 %PATH%
、(例如 C:\NotInPath
) 中,创建文件 yyy.bat
包含:
@echo off
call "xxx.bat"
将工作目录更改为任何内容(例如 C:\SomewhereElse
)和 运行 yyy.bat
。我希望看到的是:
this = C:\InPath\xxx.bat
我实际得到的是:
this = C:\SomewhereElse\xxx.bat
问题显然是由 call
中的引号引起的,因为如果我将 yyy.bat
中的 call
行更改为 call xxx.bat
,我会得到预期的输出.
我想知道造成这种行为差异的原因是什么,如果我可以做些什么来获得正确的输出,即使使用引号 - 例如方便包含 space 字符的脚本。在不执行 cmd.exe
的新实例的情况下,即 - 我需要被调用的脚本来设置一些环境值以供调用者脚本读取 .
您可以使用
修复它@echo off
echo This can be wrong %~f0
call :fixIt
exit /b
:fixIt
echo FixIt %~f0
Link 到 MC ND
的一个很好的解释
SO:What is the reason for batch file path referenced with %~dp0 sometimes changes on changing directory?