首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >命令行.cmd/.bat脚本,如何获取运行脚本的目录

命令行.cmd/.bat脚本,如何获取运行脚本的目录
EN

Stack Overflow用户
提问于 2008-09-24 21:32:26
回答 3查看 115.4K关注 0票数 82

如何获取运行的脚本的目录并在.cmd文件中使用它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-24 21:34:21

Raymond Chen有几个想法:

https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573

这里引用全文,因为MSDN归档文件往往不太可靠:

最简单的方法是使用%CD%伪变量。它将展开到当前工作目录。

set OLDDIR=%CD%

.. do stuff ..

chdir /d %OLDDIR% &rem restore current directory

(当然,使用pushd/popd可以更容易地完成目录保存/恢复,但这不是这里的重点。)

即使在命令行中,%CD%技巧也很方便。例如,我经常发现自己在一个目录中,其中有一个我想要操作的文件,但是...哦,我需要chdir到其他目录才能执行该操作。

set _=%CD%\curfile.txt

cd ... some other directory ...

somecommand args %_% args

(我喜欢使用%_%作为我的临时环境变量。)

输入SET /?查看命令处理程序提供的其他伪变量。

此外,文章中的评论也非常值得扫描,例如这篇(通过WayBack机器,因为评论是从旧文章中删除的):

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

这里介绍了%~dp0的用法:

如果您想知道批处理文件所在的位置,请执行

%~dp0

%0是批处理文件的名称。~dp为您提供指定参数的驱动器和路径。

票数 58
EN

Stack Overflow用户

发布于 2008-09-24 21:38:34

这相当于脚本的路径:

代码语言:javascript
运行
复制
%~dp0

这使用批处理参数扩展语法。参数0始终是脚本本身。

如果您的脚本存储在C:\example\script.bat中,则%~dp0的计算结果为C:\example\

ss64.com提供了有关参数扩展语法的更多信息。以下是相关摘录:

您可以使用命令行上的数字位置后跟%来获取任何参数的值。

..。

当使用参数提供文件名时,可以应用以下扩展语法:

..。

%~d1仅将%1扩展为驱动器号- C:

..。

%~p1仅将%1展开为路径,例如\utils\这包括尾随的\,它可能会被某些命令解释为转义字符。

..。

上面的修饰符可以组合使用:

%~dp1仅将%1扩展到驱动器号和路径

..。

您可以使用%0获取批处理脚本本身的路径名,参数扩展名可应用于此,因此%~dp0将返回批处理脚本的驱动器和路径,例如W:\scripts\

票数 152
EN

Stack Overflow用户

发布于 2009-12-24 01:06:28

代码语言:javascript
运行
复制
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

Source

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/130112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档