.BAT文件中的%0错误

时间:2019-03-22 08:14:53

标签: batch-file path variable-expansion

我刚刚注意到%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()); 的新实例,即-我需要被调用脚本设置一些环境值以供调用者脚本读取

1 个答案:

答案 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?