我正在尝试在批处理脚本中一起使用setlocal enabledelayedexpansion
和cd
,这似乎无法将更改持久化回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
>