gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:10:49 35 4
gpt4 key购买 nike

我在这里和其他网站上阅读了很多关于 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 观看)。

关于windows - pushd 在延迟扩展的批处理文件中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56245235/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com