繁体   English   中英

cd命令后批处理文件获取当前工作目录

[英]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%放在代码块中 ,即用括号括起来(例如,在iffor命令中),则这是经典的延迟扩展问题(如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM