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

Aar*_*ndt 460 directory batch-file

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

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

JRL*_*JRL 938

在批处理文件中:

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

  • 实际上,看起来%~dp0给出了执行批处理文件所在的*目录*的完整路径.%~dpnx0(相当于%~f0)给出了批处理文件的完整路径.有关详细信息,请参阅http://www.robvanderwoude.com/parameters.php. (76认同)
  • 另请参阅类似问题的详细解答:[获取Windows批处理脚本(.bat)中传递的参数列表](http://stackoverflow.com/q/357315/938111) (6认同)
  • @ЈЈе - - %0`可以给出当前子程序的名称,但是`%~dp0`将**总是**给出执行批处理文件的完整路径. (5认同)
  • 作为一个更明确的例子,当右键单击`.cmd`文件并以管理员身份运行时,`%cd%`给出`C:\ WINDOWS\system32`和`%~dp0`给批处理文件目录带尾随斜杠. (3认同)
  • 不幸的是,当从 .net %~dp0 作为进程运行时,是工作目录而不是批处理文件目录,很难找到。 (2认同)

Gol*_*rol 24

通常是启动批处理文件的目录,但是如果从快捷方式启动批处理文件,则可以给出不同的起始目录.此外,当您在cmd中,并且您当前的目录是c:\dir3,您仍然可以使用c:\dir1\dir2\batch.bat在这种情况下启动批处理文件,当前目录将是c:\dir3.


npo*_*aka 13

%__CD__%, %CD%, %=C:%,%~dp0

还有另一个动态变量%__CD__% ,它指向当前目录,但与%CD%它不同的是末尾有一个反斜杠。如果您想将文件附加到当前目录,这会很有用。在禁用扩展环境下也%CD%不起作用,但%__CD__%始终有效。

您可以访问相应驱动器的上次访问的目录。如果未定义该变量,则表示您尚未在当前 cmd 会话上访问该驱动器。%=C:% %=D:%

%__APPDIR__%扩展到运行当前脚本(又名cmd.exe目录)的可执行文件。

通过%~dp0 参数,您可以获得脚本本身所在的目录(除非使用了shift命令)


小智 10

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

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)
Run Code Online (Sandbox Code Playgroud)

所以说你想打开Myprog.exe.如果它在同一个文件夹中,您将使用以下命令:

start %mypath%\Myprog.exe
Run Code Online (Sandbox Code Playgroud)

这将打开当前文件夹中的Myprog.

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

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"
Run Code Online (Sandbox Code Playgroud)

  • 正如此处的最佳答案中所述,`%cd%` 是可变的,因此以管理员身份从 Windows 资源管理器运行批处理文件将给出 `C:\WINDOWS\system32`,这几乎肯定不是您想要的。`%~dp0` 更加一致。 (2认同)

小智 7

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

 start %cd%\filename.filetype
Run Code Online (Sandbox Code Playgroud)

我希望我回答了你的问题。


anu*_*901 5

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

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

> set current_dir=%cd%
> echo %current_dir%  
Run Code Online (Sandbox Code Playgroud)