Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Windows “之间的差异%~dp0“;及"\&引用;?_Windows_Batch File_Cmd - Fatal编程技术网

Windows “之间的差异%~dp0“;及"\&引用;?

Windows “之间的差异%~dp0“;及"\&引用;?,windows,batch-file,cmd,Windows,Batch File,Cmd,假设我正在使用一个批处理文件,并希望它直接指向位于批处理的同一目录中的文件夹。如果我没记错的话,你会写“%~dp0\whateverfoldername”。但是写“\whateverfoldername”就不能做到这一点吗?如果是这样,那么相应命令的区别和/或优点是什么?“\将定位于当前的目录,因此,如果您使用CD命令更改了目录,那么您将查看该目录,而不是批次所在的目录 事实上,创建一个单独的目录是很正常的,通常称为\batch或者\bellfry来保存批处理文件。如果,所讨论的bat位于路径上

假设我正在使用一个批处理文件,并希望它直接指向位于批处理的同一目录中的文件夹。如果我没记错的话,你会写“%~dp0\whateverfoldername”。但是写“\whateverfoldername”就不能做到这一点吗?如果是这样,那么相应命令的区别和/或优点是什么?

“\
将定位于当前的
目录,因此,如果您使用
CD
命令更改了目录,那么您将查看该
目录,而不是批次所在的目录

事实上,创建一个单独的目录是很正常的,通常称为
\batch
或者
\bellfry
来保存批处理文件。如果
,所讨论的bat
位于
路径上,它将被定位。
%dp0
将生成
.bat
的位置

pushd %~dp0
通常用于更改为启动批处理的原始目录。 这在较新的操作系统中非常有用,因为用户可以“以管理员身份运行”,这会为您更改当前目录!请稍后再试。只需制作一个简单的bat

@echo off
echo.CD=%CD%
pushd %~dp0
echo.CD=%CD%
pause
现在运行它。 现在在Vista、Win 7、Win 8、2008 Server或2012 Server上以管理员身份再次运行它。
看到发生了什么吗?

也许你可以。但是如果当前目录不是你希望的位置,那将失败得很惨。这将是作为管理员运行的结果…因此你按照下面的RGuggisberg所说的做。我现在明白了。这很有帮助,我明白为什么需要dp0。但是pushd和cd之间有什么区别吗?回答自己:我们之间的区别en pushd和cd是pushd存储POPD命令使用的以前的文件夹/路径。POPD将目录更改回pushd命令最近存储的路径/文件夹。Boom。我爱你们,谢谢!如果您需要将根目录遍历到另一个驱动器,pushd可以无缝工作,而对于cd,您需要使用带有/d参数的cd或者调用CD,然后键入驱动器名。我认为我们可以始终使用PUSHD而不是CD。为此,在我的自定义shell中,我使用以下命令将CD替换为PUSHD:'doskey CD=PUSHD$*'现在,您可以执行类似'CD C:\win*\sy*32'的操作,然后执行'popd'返回。此外,工作目录可能与脚本d的父目录不同我正在讨论脚本是如何启动的。