这里的值在变量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也不会改变目录。我没有在窗口看到任何路径,只有回显的值。
答案 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
)