推pushd – 可能吗?

我正在尝试创build一个非常简单的批处理脚本,其中将每个文件复制到暂存目录中,脚本将其工作目录更改为暂存目录以执行一些工作:

pushd C:\Shared\ for /r %%f in (*.dll) do ( copy %%f C:\staging\. pushd C:\staging\. echo CWD is %cd% REM do some work here popd ) popd 

但是,令我惊讶的是,只有第一个推动才能完成。

这是DOS / Windows批处理的一个已知限制吗? 如果是这样,是否有一个快速的解决方法呢?

有用。 用命令证明cd

 pushd C:\Shared\ for /r %%f in (*.dll) do ( pushd C:\staging\. echo CWD is %cd% cd popd ) popd 

但是因为你使用了一个变量( %cd% ),这个变量在同一个块中被改变和使用,你需要延迟扩展 :

 setlocal enabledelayedexpansion pushd C:\Shared\ for /r %%f in (*.dll) do ( pushd C:\staging\. echo CWD is %cd% echo correct CWD is !cd! cd popd ) popd