gpt4 book ai didi

batch-file - 达到最大 setlocal 递归级别 - setlocal

转载 作者:行者123 更新时间:2023-12-03 23:11:18 28 4
gpt4 key购买 nike

阅读了一些内容,但我正在努力解决这个问题。基本上,必须将 Setlocal 与启用和禁用延迟扩展一起使用才能使用和操作带有感叹号的变量。以下代码示例。代码部分可以在一个 session 中循环多次,在某个时候(我相信是 32 次?)我收到“已达到最大 setlocal 递归级别”错误。

我读过一些关于 Endlocal 的资料,但不知道如何使用它。我担心的是,代码提取物的某些部分(如下)使用周围代码中的环境变量(例如 %_emuExts%),而提取物中设置了一些我想在提取物外部使用的变量(例如 %launchfile% 和 %启动文件 2%)。希望这有点道理!

我的问题实际上是关于将任何 EndLocal 放在哪里以确保可以使用来自代码“周围”的变量以及设置可以在“本地”位之外使用的变量。老实说——努力将“本地”和“递归级别”的想法概念化

代码:

:: Example of var contents:
set _emuExts=cue bin iso
:: Problem code:
Setlocal DisableDelayedExpansion
for %%e in (%_emuExts%) do (
echo Extention: %%e
for /F "delims=" %%a in ('dir /b *.%%e') do (
set launchfile=%%~na.%%e
echo Launchfile this iteration: [%%~na.%%e]%_log1%
)
echo Next iteration......
)
echo Final Launchfile: "%launchfile%" %_log1%
set launchfile2=%launchfile:!={-exc-}%
echo Launchfile with replace: %launchfile2%%_log1%
setlocal enabledelayedexpansion
:: .....more code
Setlocal DisableDelayedExpansion
set "_FinalemuCmd=%_FinalemuCmd:{-exc-}=!%"
start /wait "" "%_emuExe%" %_FinalemuCmd%
setlocal enabledelayedexpansion
:: ...continues....

从功能上讲,这通过 %_emuExts% 中指定的扩展名循环当前目录,并将 %launchfile% 设置为“优先”文件扩展名(最右边的扩展名)。一些文件名中有感叹号 - 因此延迟扩展切换。然后它切换出“!”对于“{-exc-}”

道歉 - 对你们来说可能是显而易见的 - 但很难理解。谢谢

最佳答案

与其使用所有 SETLOCAL 使代码复杂化,不如修改代码以便您不需要启用延迟扩展?我没有看到上面的任何代码需要它。当然缺少代码。也许我们应该看看那个。如果您必须多次进行 SETLOCAL,则有一种称为“隧道”的技术允许您将一段代码中的局部变量传递到另一段代码。为此,您可以执行类似这样的操作endlocal & set MyVar=%MyVar%。这是有效的,因为在加载时整行被解析并且 %MyVar% 被扩展。运行时行为是将该值设置到本地化代码之外的新变量(名称相同或不同,由您选择)。

关于batch-file - 达到最大 setlocal 递归级别 - setlocal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409810/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com