gpt4 book ai didi

batch-file - Windows 批处理变量扩展无法正常工作

转载 作者:行者123 更新时间:2023-12-03 17:16:43 25 4
gpt4 key购买 nike

当我将 %0 中的驱动器号存储到变量中时,我遇到了一些意外输出。

以下代码段是从 C:\Temp\Test 运行的:

@echo off
for %%I in ("%~0") do set "Target=%%~dI"
echo Target: %Target%
pushd %Target% && echo Current: %CD% || echo Failed to change dir!

这会为 Target 打印正确的值,但不会为当前目录打印正确的值:

Target:  C:
Current: C:\Temp\Test

预期输出:

Target:  C:
Current: C:\

我也尝试过延迟扩展的相同代码,但这也不起作用。谁能解释一下这是怎么回事?

最佳答案

您的问题不在于变量扩展,而在于 pushd 行为。

这个场景可以解释 pushd(或者 cd btw)是如何工作的

C:\>cd temp
C:\temp>_

现在 %cd%c:\temp。如果你“移动”到另一个驱动器

C:\temp>e:

然后尝试

E:\>pushd c:
C:\temp>_

看到现在 %cd% 回到了 C:\temp,而不是像您期望的那样回到 C:\

但是

C:\temp>e:
E:\>pushd c:\
C:\>_

如您所料,将 %cd% 带到 C:\

因此,您的 .BAT 文件可以简单地写成

pushd %~d0\

关于batch-file - Windows 批处理变量扩展无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14870586/

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