【问题标题】:Incorrect %0 in a .BAT file.BAT 文件中的 %0 不正确
【发布时间】: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 = %~0yyy.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


【解决方案1】:

你可以修复它

@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?

【讨论】:

  • 完美。此解决方案有效。但是,我仍然想知道:这种奇怪行为的意义何在。貌似是 CMD 的 bug,但微软可能有什么原因?
  • @pepak dbenham 或者我在 stackoverflow 或 dostips.com 的某处写了一些关于 %~0 的内容,我的问题是搜索此类关键字。通常戴夫比我写得更好、更长
猜你喜欢
  • 2019-04-07
  • 2013-04-30
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 2021-11-23
相关资源
最近更新 更多