在这里和其他网站上,我读到了许多有关pushd
的问题和解答,其中绝大多数是关于UNC路径的问题。但是,我遇到了另一个问题,我没有看到任何提示。
使用Windows 10 x64 Enterprise(版本1809),我正在控制台窗口中执行以下批处理文件:
@echo off
setLocal EnableDelayedExpansion
set DestDir=c:\windows
pushd %DestDir%
我的问题是pushd
似乎以错误的方式执行或根本没有执行。这意味着在运行批处理文件时,我不在c:\windows
中,但在运行它之前仍在我所在的目录中。
我拼命尝试了几件事来理解这个问题(知道那些测试没有道理):
c:\windows
放在引号(set DestDir="c:\windows"
)%DestDir%
放在引号(pushd "%DestDir%"
)!
而不是%
,因为开启了延迟扩展,即pushd "!DestDir!"
但是,当我不打开延迟扩展时,pushd
会按预期工作。换句话说,在运行以下批处理文件之后
@echo off
set DestDir=c:\windows
pushd %DestDir%
在运行批处理文件之前,无论进入哪个目录,我的确已经进入了c:\ windows。
我想我现在很傻,但是我一生都无法将其束之高阁。因此,有人可以解释为什么pushd
如果延迟扩展处于活动状态会失败吗?
答案 0 :(得分:1)
您的问题的原因已在评论中讨论,但到目前为止没有解决方案。
您可以通过显式endlocal
来解决此问题:
REM @echo off
setLocal EnableDelayedExpansion
set DestDir=c:\windows
endlocal & pushd %DestDir%
一次性分析了最后一行,因此在执行整行之前,将%DestDir%
替换为其值(在endlocal
之前)(用echo on
运行)。