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

时间:2016-06-23 03:45:19

标签: batch-file cmd echo cd

这里的值在变量lastoccur中是正确的,并且它也是回显的

但移动到该目录的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也不会改变目录。我没有在窗口看到任何路径,只有回显的值。

1 个答案:

答案 0 :(得分:0)

问题来自第setlocal enabledelayedexpansion行。

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

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

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

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