gpt4 book ai didi

variables - 批处理脚本帮助 - 将 DelayedExpansion Var 的子字符串替换为另一个 DelayedExpansion Var

转载 作者:行者123 更新时间:2023-12-03 08:00:09 25 4
gpt4 key购买 nike

基本上我正在尝试做 !var1:SomeText=!var2!!但这段代码不起作用。
我错过了什么?

最佳答案

在执行使用变量进行搜索和/或替换的搜索和替换操作时,扩展顺序至关重要。内部变量必须在外部搜索和替换扩展发生之前扩展。尝试对两者都使用延迟扩展显然是行不通的,因为延迟扩展发生在一个时间点。

在另一个变量中扩展一个变量的经典方法对外部使用延迟扩展,对内部使用正常扩展:echo !var1:SomeText=%var2%!"
我将假设您出于某种原因想要使用延迟扩展。也许扩展发生在代码块中,并且其中一个变量设置在同一 block 中。正常扩展不起作用,因为直到 block 结束后它才能看到 block 内分配的值。

解决方案一

解决问题的一种方法是使用 CALL:

call echo %%var1:SomeText=!var2!%% 

这工作如下:
  • 解析器的百分比阶段将双百分比转换为单百分比,导致call echo %var1:SomeText=!var2!%
  • 延迟扩展扩展 !var2!,导致call echo %var1:SomeText=ReplacementText%
  • 执行 CALL ECHO 并进行附加级别的百分比处理。执行搜索和替换扩展,结果为 ResultOfSearchAndReplace被回响到屏幕上。

  • 这有效,但速度相对较慢。如果扩展值包含特殊字符(如 >),也会出现问题。 , &| .我很少使用这种技术。

    解决方案二

    快速且更可靠的方法是分两步进行扩展。先转移 !var2!的值到 FOR 变量。然后,您可以使用 FOR 变量作为替换字符串,并在第二步中使用延迟扩展。这完全避免了更脆的膨胀百分比。
    for /f "delims=" %%A in ("!var2!") do echo !var1:SomeText=%%A!

    上述工作是因为 FOR 变量扩展发生在延迟扩展之前。

    到目前为止,这是我解决这个问题的首选方法。

    有关批处理解析器各个阶段的更详尽解释,请参阅 jeb 对 How does the Windows Command Interpreter (CMD.EXE) parse scripts? 的回答。

    关于variables - 批处理脚本帮助 - 将 DelayedExpansion Var 的子字符串替换为另一个 DelayedExpansion Var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905625/

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