"%~dp0"和"."之间有什么区别?(这是一个关于IT技术的提问标题)

7
假设我正在使用批处理文件,并希望它指向与批处理在同一目录中的文件夹。如果我没错的话,你应该写“%~dp0\whateverfoldername”。但是,只写“.\whateverfoldername”会不会达到相同的效果呢?如果可以,那么这两个命令有何区别和/或优势呢?

1
也许你可以这样做。但是如果当前目录不是你所希望的目录,那么这种方法将会彻底失败。 - Hans Passant
运行管理员权限会导致什么结果... 因此你要做RGuggisberg所说的...我现在明白了,哈哈 - user2259606
2个回答

19
pushd %~dp0

常用于从批处理文件启动的原始目录中切换回来。当用户以管理员身份运行时,这在较新的操作系统中非常有用,因为它会为您更改当前目录! 有机会试试看。只需制作一个简单的批处理文件

@echo off
echo.CD=%CD%
pushd %~dp0
echo.CD=%CD%
pause

现在运行它。 现在在Vista、Win 7、Win 8、2008 Server或2012 Server上再次以“管理员”身份运行它。 看看会发生什么?


好的,这很有帮助,我明白为什么需要dp0了。但是pushd和cd之间有什么区别呢? - user2259606
回答自己:pushd和cd的区别在于,pushd会存储以供POPD命令使用的先前文件夹/路径。POPD将目录更改回最近由PUSHD命令存储的路径/文件夹。完美。我爱你们,谢谢! - user2259606
1
如果您需要遍历根目录到另一个驱动器,PUSHD 可以无缝工作,而使用 CD,则需要使用 /d 参数或调用 CD 然后输入驱动器名称。 - Stephen Connolly
我认为我们总是可以使用PUSHD而不是CD。在我的自定义Shell中,我用以下命令将CD替换为PUSHD:'doskey cd=pushd $'。现在你可以执行类似于“cd C:\win\sy*32”的操作,然后再执行“popd”来返回。 - orad

3
".\\"将相对于CURRENT目录定位,因此如果您使用CD命令更改了目录,则会查看THAT目录,而不是批处理所在的目录。
事实上,通常会创建一个单独的目录,通常称为\batch\belfry,以保存批处理文件。只要位于path上的,bat文件就可以被找到。%dp0将产生.bat的位置。"

此外,工作目录可能会因脚本的启动方式而与父目录不同。 - Ansgar Wiechers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接