加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

变量 – 批处理脚本帮助 – 将DelayedExpansion Var的子字符串替

发布时间:2020-12-14 04:37:08 所属栏目:Windows 来源:网络整理
导读:基本上我正在尝试!var1:SomeText =!var2 !!但是这段代码不起作用. 我错过了什么? 解决方法 在执行搜索和替换使用变量进行搜索和/或替换的操作时,扩展顺序至关重要.必须在外部搜索和替换扩展之前扩展内部变量.尝试使用延迟扩展两者显然不起作用,因为延迟
基本上我正在尝试!var1:SomeText =!var2 !!但是这段代码不起作用.
我错过了什么?

解决方法

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

在另一个变量中扩展变量的经典方法使用外部的延迟扩展和内部的正常:echo!var1:SomeText =%var2%!“

我打算假设你想为两者使用延迟扩展是有原因的.也许扩展发生在代码块中,其中一个变量设置在同一个块中.正常扩展将不起作用,因为在块结束之前,它无法看到块内分配的值.

解决方案1

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

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

其工作原理如下:

>解析器的百分比阶段将双倍百分比转换为单个百分比,从而产生
call echo%var1:SomeText =!var2!%
>延迟扩展扩展!var2!,导致
调用echo%var1:SomeText = ReplacementText%
>执行CALL ECHO并进行额外的百分比处理.执行搜索和替换扩展,导致ResultOfSearchAndReplace回显到屏幕.

这有效,但速度相对较慢.如果扩展值具有像>,&amp ;;等特殊字符,它也可能会出现问题.或者.我很少使用这种技术.

解决方案2

快速且更可靠的方法是分两步进行扩展.首先转移!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?的回答

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读