推送内推 - 可能吗?

时间:2016-01-12 10:13:03

标签: windows batch-file cmd

我正在尝试创建一个非常简单的批处理脚本,其中对于复制到临时目录的每个文件,脚本将其工作目录更改为该临时目录以执行某些操作:

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

然而,令我惊讶的是,只有第一个pushd完成了。

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

1 个答案:

答案 0 :(得分:2)

它有效。使用命令cd证明:

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

但是因为你使用了一个变量(%cd%),它在同一个块中被更改和使用,你需要delayed Expansion

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