使用变量进行批处理文件子字符串替换

11

我在使用批处理文件时,遇到了一个问题:当变量被使用时,无法进行子字符串替换。特别是当指定!original!变量时出现问题;如果它是一个字面字符串,那么就可以正常工作。然而,这对我的使用来说不起作用。

setlocal ENABLEDELAYEDEXPANSION
set original=chair
set replacement=table
set str="jump over the chair"
set str=%str:!original!=!replacement!%

非常感谢您的帮助。

2个回答

18

如果使用call,您可以在不需要setlocal enabledelayedexpansion的情况下执行此操作,类似于以下方式:

call set str=%%str:%original%=%replacement%%%

注意:首先将其解析为call set str=%str:chair=table%


4

您的扩展顺序有误。

正常(百分号)扩展发生在解析时(第一步)
延迟(感叹号)扩展发生在运行时(第二步)。

搜索和替换术语必须在进行搜索和替换之前进行扩展。因此,您需要:

set str=!str:%original%=%replacement%!

谢谢,这可能是我的另一个问题。我认为我的问题是不理解批处理文件中IF语句的工作方式。我将此放在IF语句的THEN部分,我相信这就是为什么只评估了一个变量的结果。这个链接对我很有帮助:https://dev59.com/um855IYBdhLWcg3wZzXf - delpium

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接