batch-file - SETLOCAL ENABLEDELAYEDEXPANSION导致CD和PUSHD无法持久保存

标签 batch-file windows-scripting

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

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

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

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

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

检查this

最佳答案

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

参见setlocal /?:

Begins localization of environment changes in a batch file. Environment changes made after SETLOCAL has been issued are local to the batch file. ENDLOCAL must be issued to restore the previous settings. When the end of a batch script is reached, an implied ENDLOCAL is executed for any outstanding SETLOCAL commands issued by that batch script.



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

尝试此操作,请注意它在批处理中回显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
>

关于batch-file - SETLOCAL ENABLEDELAYEDEXPANSION导致CD和PUSHD无法持久保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26246151/

相关文章:

batch-file - 分割成相等的部分并使用 ffmpeg 转换许多 mp4 视频

batch-file - 批处理 IF ELSE 语句都执行

ant - 从 ANT 运行 BAT 文件

javascript - 在 Windows 脚本宿主中获取 javascript 文件路径

batch-file - 在下一个批处理脚本运行中使用由批处理脚本设置的环境变量

java - 要在批处理文件中传递的单击文件的路径

java - 在spring web mvc中创建并执行.bat文件

batch-file - 从多个 TXT 文件中删除标题行的命令行脚本

powershell - 无法将 "-persist"添加到 New-PSDrive - 出现错误 "network resource type is not correct"

windows - Copy-Item 使用凭据将文件从本地复制到远程服务器