Batch file cd命令未更改为变量值更改目录
在这里,变量lastOccurse中的值是正确的,并且它会被回显 但是移动到该目录的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
@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%”
)。