我正在尝试在批处理脚本中一起使用setlocal enabledelayedexpansioncd,这似乎无法将更改持久化回shell。

我需要setlocal enabledelayedexpansion的原因是,我需要在脚本运行时动态扩展脚本中的变量。

考虑下面的示例批处理文件:

a.bat
================================
setlocal enabledelayedexpansion
cd ..

上面的批处理文件未按预期迁移到先前的目录!

检查this

最佳答案

问题在于setlocal导致任何当前目录更改都位于批处理文件的本地。

参见setlocal /?:



当前目录包含在“环境更改”中。

尝试此操作,请注意它在批处理中回显C:\%CD%,但是在退出批处理时仍会重置当前目录。

[11:42:00.17] C:\temp
> cat test.bat
@echo off
setlocal enabledelayedexpansion
cd ..
echo %CD%
[11:42:19.38] C:\temp
> test.bat
C:\

[11:42:23.00] C:\temp
>

09-25 20:27