[英]tell a batch file the working directory without using change directory (cd) command
[英]Batch file get present working directory after cd command
当我运行位于C:\\some\\dir
的批处理文件时,我知道可以使用%cd%
和%~dp0
来获取批处理文件本身的路径以及此处所述的其他信息。
但是在批处理文件执行了几个cd
命令之后,我还没有设法获得“当前工作目录”。
因此,例如:
C:\\some\\dir
cd sub
,然后执行cd sub2
我将如何获得该文件夹的路径?
在命令行中手动执行上述所有操作时,它应该产生C:\\some\\dir\\sub\\sub2
并且等效于pwd
命令!
我上面的任何命令都没有运气! 它说这里 %cd%
变量应该在使用cd
命令后更新,但是我总是得到C:\\some\\dir
作为输出。
编辑
如果您的批处理文件执行以下操作:
@echo off
echo Start at: %cd%
cd sub
cd sub2
echo Currently at: %cd%
第二个echo
命令肯定会显示C:\\some\\dir\\sub\\sub2
。 但是,如果将%cd%
放在代码块中 ,即用括号括起来(例如,在if
或for
命令中),则这是经典的延迟扩展问题(如MC ND所示):
@echo off
setlocal EnableDelayedExpansion
>log.txt (
cd sub
cd sub2
echo Before this code block the current directory was: %cd%
echo But currently it is: !cd!
)
有关更多详细信息,请查找“延迟扩展”。
I)您可以按照脚本的开头保留当前目录:
@echo off
set "curr_dir=%cd%"
...some cd commands...
cd /d "%curr_dir%"
II)您可以使用pushd/popd
(可能更好)...
@echo off
....
pushd sub
...some commands...
popd
pushd sub2
...some commands...
popd
...或类似这样,如果给定的子目录可能不存在:
@echo off
....
pushd .
cd /D sub
...some commands...
popd
pushd .
cd /D sub2
...some commands...
popd
说明:假设你成功推sub
到目录栈,但sub2
无法找到这样pushd sub2
失败并没有什么推,接下来popd
未推sub
无意中; 推送当前目录push pushd .
但是永远不会失败...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.