我花了很长时间才找到这个简单问题的答案,终于找到了。想与那些将 shell 脚本移植到 bat 模拟程序的人分享。
答案1
简单的解决方案是:
cd /d "%~dp0"
%0
包含正在运行的.bat或.cmd文件的完整路径。
扩展~
可应用于所有编号参数 ( %0
... %9
) 以及 FOR 使用的单字母变量(例如%%a
)。最常用的扩展是:
~d
:驱动器号(带冒号)~p
:目录路径(不带驱动器号)~n
:不带扩展名的文件名~x
:文件扩展名(以点开头)
因此将它们组合成%~dp0
将像 一样工作dirname
,而%~nx0
将像 一样工作basename
。
答案2
@Stand Alone 描述的答案并不完全可靠,因为如果脚本在另一个驱动器而不是当前目录中,它将不起作用。因此其他一些解决方案是:
方法 1
pushd "%~dp0"
方法 2
cd /d "%~dp0"
笔记:要将目录更改为最后设置的目录,popd
可以使用命令。这仅在使用#方法 1 更改目录后才有效。
答案3
cd /d "%0\.."
每个文件名都可以用作目录路径 ))