ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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


C
Community

从您的批处理文件中:

%cd% 指的是当前工作目录(变量)

%~dp0 是指批处理文件目录的完整路径(静态)

%~dpnx0 和 %~f0 都指批处理目录和文件名的完整路径(静态)。

另请参阅:What does %~dp0 mean, and how does it work?


实际上,看起来 %~dp0 给出了执行批处理文件所在的 目录 的完整路径。%~dpnx0(相当于 %~f0)给出了批处理文件的完整路径.有关详细信息,请参阅 robvanderwoude.com/parameters.php
另请参阅类似问题的详细答案:Get list of passed arguments in Windows batch script (.bat)
不幸的是,当从.net %~dp0 作为进程运行时,它是工作目录而不是批处理文件目录,很难找到这一点。
作为更明确的示例,当右键单击 .cmd 文件并以管理员身份运行时,%cd% 给出 C:\WINDOWS\system32,而 %~dp0 给出带有斜杠的批处理文件目录。
@TwistedCode %~dp0 正在引用批处理文件参数的 参数 0 的驱动器和路径。它不是 环境变量引用。它是一个批处理文件参数引用。 %~dp0 扩展为当前处理批处理文件的完整路径。 %~dp0 在执行时扩展为 C:\Temp\Devlopement & Test()!\ 的批处理文件 C:\Temp\Devlopement & Test()!\Main.bat 可以call批处理文件 C:\Temp\SubBatch.cmd,例如 call "%~dp0..\SubBatch.cmd",还包含 %~dp0 在执行时扩展为 C:\Temp\。在 cmd 窗口中运行 call /? 以获取帮助。
G
GolezTrol

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


T
Tom

在批处理文件中,%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"

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

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

 start %cd%\filename.filetype

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


g
g00glen00b

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

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

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

i
icyrock.com

它是您启动批处理文件的目录。例如,如果您的批处理位于 c:\dir1\dir2 并且您执行 cd c:\dir3,则运行批处理,当前目录将为 c:\dir3


n
npocmaka

%__CD__% , %CD% , %=C:%

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

使用 %=C:% %=D:%,您可以访问相应驱动器的最后访问目录。如果未定义变量,则您尚未访问当前 cmd 会话中的驱动器。

%__APPDIR__% 扩展为运行当前脚本的可执行文件,即 cmd.exe 目录。


M
Mofi

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

%SystemRoot%\System32\xcopy.exe /e /i "%cd%Ala" "C:\KS\Ala\"

但这可以完成工作:

%SystemRoot%\System32\xcopy.exe /e /i "%~dp0Ala" "C:\KS\Ala\"

这是我正在寻找的用于确定没有该批处理文件名的 bat 文件的父目录路径的开关:%~dp0
r
robert

您的 bat 文件应该在您打开 bat 文件时所在的目录中。但是,如果您想将其放入不同的目录,您可以使用 cd [whatever directory]