使用获取批处理文件目录的标准构造%~dp0
。
但是,如果批处理文件的名称用双引号引起来,则会返回错误的目录。
例如,npm在Windows中以以下格式生成cmd文件
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\coffee-script\bin\coffee" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\coffee-script\bin\coffee" %*
)
当不带引号调用时,命令将按预期成功执行。
C:\test> coffee --version
CoffeeScript version 1.10.0
当用引号调用时,命令失败
C:\test> "coffee" --version
Error: 'C:\test\node_modules\coffee-script\bin\coffee'
发生的事情%~dp0
已经评估到当前的工作目录,C:\test\
而不是批处理文件所在的目录。
有没有一种%~dp0
更可靠的替代构造?
生成工具或其他批处理文件在发出命令时将可执行文件的名称括在双引号中的情况很常见,以防该名称包含空格。
2
默认并遵守此行为。阅读的答案和讨论相关问题(不完全名单!):CMD:%的失败〜D0当受理报价批处理文件的名称,并在批处理文件〜关于更改目录DP0变化等等,等等
—
JosefZ
解决了吗?
—
马克·德文