【发布时间】:2019-03-22 08:14:52
【问题描述】:
我刚刚注意到%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,我会得到预期的输出。
我想知道造成这种行为差异的原因是什么,如果我可以做些什么来获得正确的输出,即使是引号 - 例如以方便包含空格字符的脚本。在不执行cmd.exe 的新实例的情况下,即- 我需要被调用的脚本来设置一些环境值以供调用者脚本读取。
【问题讨论】:
-
请试试这个。在
xxx.batecho local = %~0和yyy.bat中执行echo remote %~0 && call xxx.bat并显示输出。 -
@GerhardBarnard:
remote = C:\NotInPath\yyy.bat,local = xxx.bat(没有路径,CALL 中的 %0 基本上复制了调用字符串,即当我从呼叫中删除.bat扩展名时,我得到 @987654348 @)
标签: batch-file path variable-expansion