Batch file cd命令未更改为变量值更改目录

Batch file cd命令未更改为变量值更改目录,batch-file,cmd,echo,cd,Batch File,Cmd,Echo,Cd,在这里,变量lastOccurse中的值是正确的,并且它会被回显 但是移动到该目录的cd命令似乎不起作用。为什么会这样 @echo off mode con: cols=157 lines=2500 setlocal enabledelayedexpansion for /f "tokens=2" %%G in ('p4 client -o 2850NewDev ^| findstr /c:"Root:"') do ( set lastoccur=%%G ) cd /d !lasto

在这里,变量lastOccurse中的值是正确的,并且它会被回显

但是移动到该目录的cd命令似乎不起作用。为什么会这样

@echo off
mode con: cols=157 lines=2500
setlocal enabledelayedexpansion

for /f "tokens=2" %%G in ('p4 client -o 2850NewDev ^| findstr /c:"Root:"') do (
    set lastoccur=%%G
)

cd /d !lastoccur!
echo !lastoccur!
PAUSE
更新1

我将代码更改为:

@echo off
mode con: cols=157 lines=2500
set lastoccur=""

for /f "tokens=2" %%G in ('p4 client -o 2850NewDev ^| findstr /c:"Root:"') do (
    set lastoccur=%%G
)

cd %lastoccur%
echo %lastoccur%
PAUSE

现在,cd也不会更改目录。我在窗口上看不到任何路径,只有回显值。

问题来自行
setlocal enabledelayedexpansion

运行时创建本地会话。您可以将其视为正在生成的子cmd.exe进程(不是,但它的行为类似于一个)。在该行之后但在相应的
endlocal
(如果有)之前所做的一切都是在其自己的分区环境中完成的

您正在更改新创建的本地环境中的目录,但未更改全局环境

您的第二次尝试已经接近尾声,但如果不延迟扩展,就无法使用在代码块内部创建的变量。但是,您可以使用
for
循环变量来执行操作

for /f "tokens=2" %%G in ('p4 client -o 2850NewDev ^| findstr /c:"Root:"') do (
    cd /d %%G
    echo %%G
)

问题来自行
setlocal enabledelayedexpansion

运行时创建本地会话。您可以将其视为正在生成的子cmd.exe进程(不是,但它的行为类似于一个)。在该行之后但在相应的
endlocal
(如果有)之前所做的一切都是在其自己的分区环境中完成的

您正在更改新创建的本地环境中的目录,但未更改全局环境

您的第二次尝试已经接近尾声,但如果不延迟扩展,就无法使用在代码块内部创建的变量。但是,您可以使用
for
循环变量来执行操作

for /f "tokens=2" %%G in ('p4 client -o 2850NewDev ^| findstr /c:"Root:"') do (
    cd /d %%G
    echo %%G
)

这完全取决于
p4 client-o 2850NewDev
的输出是什么样子的。@LastOccurse变量中最终设置的值是:c:\fold1\fold2我想要的是设置LastOccurse变量中的值,并在循环外将目录更改为存储值。这不是因为
@echo off
(所做的只是阻止命令在执行之前显示),这是因为
setlocal enabledelayedexpansion
。有关详细信息,请参阅我的答案。
cd
命令的作用是什么?它应该更改目录或抛出错误消息。您的目录名中是否有空格(更准确地说,在最后一个选项中)?(如果是,您必须
cd”%lastOccurse%“
)。这完全取决于
p4 client-o 2850NewDev
的输出是什么样子的。@LastOccurse变量中最终设置的值是:c:\fold1\fold2我想要的是在循环外设置LastOccurse变量中的值,并将目录更改为存储值。这不是因为
@echo off
(所做的只是阻止命令在执行之前显示),这是因为
setlocal enabledelayedexpansion
。有关详细信息,请参阅我的答案。
cd
命令的作用是什么?它应该更改目录或抛出错误消息。您的目录名中是否有空格(更准确地说,在最后一个例子中)?(如果是,您必须
cd”%lastOccurse%”
)。