繁体   English   中英

pushd 在延迟扩展的批处理文件中不起作用

[英]pushd not working in a batch file with delayed expansion

我在这里和其他网站上阅读了许多关于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失败吗?

您的问题的原因已经在评论中讨论过,但目前还没有解决方案。
您可以通过明确的endlocal解决这个问题:

REM @echo off
setLocal EnableDelayedExpansion
set DestDir=c:\windows
endlocal & pushd %DestDir%

最后一行被一次性解析,因此%DestDir%在执行整行之前被替换为其值(在endlocal之前)(运行echo on以观察)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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