更改当前工作目录后批处理文件 %cd% 没有改变
batch file %cd% doesn't changed after changing current working directory
我写了一个批处理文件 (windows os),它使用 %CD% 打印当前工作目录,但即使我更改了当前目录,%CD% 的值也没有改变.在“IF”语句的上下文中,这种奇怪的行为发生在我身上。
这是文件夹和批处理文件的快照Test.bat
我从 dir3 调用批处理文件。
如果代码如下:
@echo off
@echo %CD%
cd /d c:\temp\dir1
@echo %CD%
但是在下面的代码中它不起作用,如提示 window 的快照所示。即使在更改当前工作目录后,它也会打印第一个 - c:\temp\dir3.
@echo off
if exist "c:\bom" (
@echo file exist already
) else (
@echo %CD%
cd /d c:\temp\dir1
@echo %CD%
)
所以你这里缺少delayedexpansion
。这里有两种方法:
@echo off
setlocal enabledelayedexpansion
if exist "c:\bom" (
@echo file exist already
) else (
@echo !CD!
cd /d c:\temp\dir1
@echo !CD!
)
或者只使用 cd
而不 echo
变量 %cd%
@echo off
if exist "c:\bom" (
@echo file exist already
) else (
cd
cd /d c:\temp\dir1
cd
)
我写了一个批处理文件 (windows os),它使用 %CD% 打印当前工作目录,但即使我更改了当前目录,%CD% 的值也没有改变.在“IF”语句的上下文中,这种奇怪的行为发生在我身上。
这是文件夹和批处理文件的快照Test.bat
我从 dir3 调用批处理文件。
如果代码如下:
@echo off
@echo %CD%
cd /d c:\temp\dir1
@echo %CD%
但是在下面的代码中它不起作用,如提示 window 的快照所示。即使在更改当前工作目录后,它也会打印第一个 - c:\temp\dir3.
@echo off
if exist "c:\bom" (
@echo file exist already
) else (
@echo %CD%
cd /d c:\temp\dir1
@echo %CD%
)
所以你这里缺少delayedexpansion
。这里有两种方法:
@echo off
setlocal enabledelayedexpansion
if exist "c:\bom" (
@echo file exist already
) else (
@echo !CD!
cd /d c:\temp\dir1
@echo !CD!
)
或者只使用 cd
而不 echo
变量 %cd%
@echo off
if exist "c:\bom" (
@echo file exist already
) else (
cd
cd /d c:\temp\dir1
cd
)