Batch file 批处理文件%cd%不存在';更改当前工作目录后,t发生更改

Batch file 批处理文件%cd%不存在';更改当前工作目录后,t发生更改,batch-file,cd,Batch File,Cd,我编写了一个批处理文件(windows os),该文件使用%CD%打印当前工作目录,但即使我更改了当前目录,%CD%的值也没有更改。这种奇怪的行为发生在“IF”语句的上下文中 下面是文件夹和批处理文件Test.bat的快照 我从dir3调用批处理文件 如果代码如下,则工作正常: @echo off @echo %CD% cd /d c:\temp\dir1 @echo %CD% 但是在下面的代码中,它并没有像提示窗口的快照中所示那样工作。即使更改了当前工作目录,它也会打印第一个目录-c:

我编写了一个批处理文件(windows os),该文件使用%CD%打印当前工作目录,但即使我更改了当前目录,%CD%的值也没有更改。这种奇怪的行为发生在“IF”语句的上下文中

下面是文件夹和批处理文件Test.bat的快照

我从dir3调用批处理文件

如果代码如下,则工作正常:

@echo off 
@echo %CD%
cd /d c:\temp\dir1
@echo %CD%

但是在下面的代码中,它并没有像提示窗口的快照中所示那样工作。即使更改了当前工作目录,它也会打印第一个目录-c:\temp\dir3

@echo off 
if exist "c:\bom" (
   @echo file exist already
) else (
@echo %CD%
cd /d c:\temp\dir1
@echo %CD%
)

因此您缺少
延迟扩展。但这里有两种方法:

@echo off 
setlocal enabledelayedexpansion
if exist "c:\bom" (
  @echo file exist already
) else (
  @echo !CD!
  cd /d c:\temp\dir1
  @echo !CD!
)
或者只使用
cd
而不使用
echo
ing变量
%cd%

@echo off 
if exist "c:\bom" (
  @echo file exist already
) else (
  cd
  cd /d c:\temp\dir1
  cd
)

首先,使用反斜杠而不是正斜杠。cd/d“c:\dir1”,因为windows默认使用反斜杠。我还希望你提供一个屏幕截图,如果可能的话,它不回显新的当前目录。此外,除非您想使用实际变量
%cd%
,否则只需执行
cd
,而无需
@echo%cd%
cd
,无需任何参数即可打印当前工作目录。无需使用
@echo%CD%
@GerhardBarnard-谢谢,我添加了快照。根据您的评论进行检查后,我发现它只发生在如图所示的IF上下文中。好的,现在添加了循环,情况就大不相同了。。您需要延迟扩展或仅使用
cd
这对于批处理文件来说不是“奇怪的行为”。请参阅“”,并删除重复的问题。