批处理文件中的当前目录是什么?


510

我想创建一些批处理文件来使程序自动化。

我的问题是创建批处理文件时,当前目录是什么?它是文件所在的目录,还是命令提示符中显示的目录,还是其他?

Answers:


1025

在批处理文件中:

  • %cd%当前工作目录(变量)
  • %~dp0 指向批处理文件目录的完整路径(静态)
  • %~dpnx0并且%~f0都指向完整路径批目录和文件名(静态)。

另请参阅:%〜dp0是什么意思,它是如何工作的?


5
@Јοеу - %0可以给当前子程序的名称,但%~dp0始终给予充分的路径执行批处理文件。
dbenham

77
实际上,看起来%〜dp0提供了正在执行的批处理文件所在目录的完整路径。%〜dpnx0(等效于%〜f0)给出了批处理文件的完整路径。有关更多详细信息,请参见robvanderwoude.com/parameters.php
致命狗狗

6
另请参见类似问题的详细详细答案:获取Windows批处理脚本(.bat)中传递的参数列表
olibre 2013年

1
不幸的是,当从.net%〜dp0作为进程运行时,工作目录而不是批处理文件目录是很难找到的。
流浪汉

3
作为更明确的示例,当右键单击.cmd文件并以管理员身份运行时,%cd%将给批处理文件目录一个斜杠C:\WINDOWS\system32%~dp0给出一个斜杠。
icc97

25

通常是从中启动批处理文件的目录,但是如果您从快捷方式启动批处理文件,则可以指定其他启动目录。另外,当您使用cmd时,当前目录为c:\dir3,则仍然可以使用c:\dir1\dir2\batch.bat这种情况启动批处理文件,当前目录为c:\dir3


11

在批处理文件中,%cd%是当前目录最常用的命令,尽管您可以设置自己的变量:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

假设您要打开Myprog.exe。如果在同一文件夹中,则可以使用以下命令:

start %mypath%\Myprog.exe

这将从当前文件夹中打开Myprog。

另一种选择是在C:中创建一个名为AutomatePrograms的目录。然后,将文件传输到该文件夹​​,然后可以使用以下命令打开它们:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"

1
如此处的最高答案所述,它%cd%是变量,因此以管理员身份从Windows资源管理器运行该批处理文件将给出的C:\WINDOWS\system32结果几乎肯定不是您想要的。%~dp0更一致。
icc97

6

假设您正在当前目录中打开文件。该命令将是:

 start %cd%\filename.filetype

希望我回答了你的问题。


5

这是您运行命令以执行批处理文件的目录。

如以上答案中所述,您可以将以下命令添加到脚本中以进行验证:

> set current_dir=%cd%
> echo %current_dir%  

4

这是您启动批处理文件的目录。例如,如果您有批处理,c:\dir1\dir2并且您正在cd c:\dir3运行,然后运行批处理,则当前目录为c:\dir3


0

只是我的2美分。如果从放置在pendrive上的批处理文件(Windows 7)中调用,以下命令将失败:

xcopy /s /e /i %cd%Ala C:\KS\Ala

但这可以完成工作:

xcopy /s /e /i %~dp0Ala C:\KS\Ala

这是我要确定没有该批处理文件名的bat文件的父目录路径的开关:%~dp0
Ammar Mohammad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.