我正在尝试创建一个非常简单的批处理脚本,其中对于复制到临时目录的每个文件,脚本将其工作目录更改为该临时目录以执行某些操作:
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批处理的已知限制吗?如果是这样,是否有一个快速的解决方法呢?
答案 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