我刚刚注意到%0
在通过.bat
调用的%PATH%
文件中的行为很奇怪。
在%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
问题显然是由call
中的引号引起的,因为如果将yyy.bat
中的call xxx.bat
行更改为cmd.exe
,则会得到预期的输出。 / p>
我想知道这种行为差异的原因可能是什么,并且即使有引号,我是否可以做一些事情以获取正确的输出-例如方便包含空格字符的脚本。无需执行 return this.RedirectToAction<AccountController>(m => m.LogIn());
的新实例,即-我需要被调用脚本设置一些环境值以供调用者脚本读取。
答案 0 :(得分:3)
您可以使用
对其进行修复@echo off
echo This can be wrong %~f0
call :fixIt
exit /b
:fixIt
echo FixIt %~f0
链接到MC ND的很好的解释
SO:What is the reason for batch file path referenced with %~dp0 sometimes changes on changing directory?