Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何获取批处理文件的路径作为变量?_Batch File_Path_Cmd - Fatal编程技术网

Batch file 如何获取批处理文件的路径作为变量?

Batch file 如何获取批处理文件的路径作为变量?,batch-file,path,cmd,Batch File,Path,Cmd,如何获取批处理文件的路径作为变量 例如,我发现我可以使用%cd%获取当前正在执行的批处理文件的目录,但是如果我从第一个批处理文件调用第二个批处理文件,第二个文件中的%cd%将指向第一个文件的目录 谢谢。你搞错了。正如文档(帮助集)明确指出的那样 %CD% - expands to the current directory string. 因此,它不是批处理文件的目录,而是当前工作目录,与PowerShell中的$pwd相同。它可能是当前正在执行的批处理文件的目录,但前提是当前目录相同 您需要

如何获取批处理文件的路径作为变量

例如,我发现我可以使用
%cd%
获取当前正在执行的批处理文件的目录,但是如果我从第一个批处理文件调用第二个批处理文件,第二个文件中的
%cd%
将指向第一个文件的目录


谢谢。

你搞错了。正如文档(
帮助集
)明确指出的那样

%CD% - expands to the current directory string.
因此,它不是批处理文件的目录,而是当前工作目录,与PowerShell中的
$pwd
相同。它可能是当前正在执行的批处理文件的目录,但前提是当前目录相同


您需要的是
%~dp0
,它将评估调用的驱动器和路径,即批处理文件。

太好了,谢谢您的快速回复。我发现这相当令人困惑——当前工作目录和当前正在执行的批处理文件目录之间的差异。每个进程都有一个当前工作目录。在shell中,这就是您使用
cd
pushd
popd
等更改的内容。更改当前工作目录不会移动文件,在别处执行程序或批处理文件也不会改变当前工作目录。您可以通过键入D:\foo.cmd`从
C:`启动批处理文件,工作目录仍然是`C:`,即使批处理文件的目录在别处。