替换字符串中的字符

25
我将尝试替换文本字符串中的一个字符为另一个字符,但是一直没有成功。
假设文本如下:
cat rat mat fat

我希望这个脚本将所有的 t 替换为 p

cap rap map fap

我所拥有的是以下内容,但似乎对我没什么用。
SET /P MY_TEXT=ENTER TEXT:

SET T2P=P

SET NEW_TEXT=%TEXT=:T!T2P!%

MSG * %NEW_TEXT%

只是关于for循环的两个建议:-查找有关使用!而不是%来处理变量的指令。 - Claudio
3个回答

24

试试这个

setlocal 
set string=cat rat mat fat
set string=%string:t=p%

14

你把等号=放错位置了。请尝试以下方式:

setlocal enabledelayedexpansion
set /P MY_TEXT=ENTER TEXT:
SET T2P=P
set NEW_TEXT=%MY_TEXT:T=!T2P!%
MSG * %NEW_TEXT%

您也可以反过来进行扩展,即:
set NEW_TEXT=!MY_TEXT:T=%T2P%!

现在弹出了一个消息框,显示T=P,这不是我想要的吗? - LabRat
我明白出了什么问题了,你的回复中写的是TEXt而不是MY-TEXT,现在可以正常工作了 :) - LabRat
我发现这个技巧非常有用,但是发现它在 FOR 循环内部不起作用。 - Lizz
1
@Lizz:在FOR循环中进行变量扩展可能会很棘手。通常在FOR循环开始之前就会扩展变量,您可以通过启用延迟扩展来解决一些问题,请参见http://www.robvanderwoude.com/variableexpansion.php以获取更多详细信息和示例。然而,这种技术已经使用了延迟扩展,所以我不确定您需要做什么才能使它在FOR循环中工作。我怀疑这取决于FOR循环正在做什么以及它如何执行。 - Grhm
是的,我使用了Rob的页面,但它没有解决这个问题。这一次我很幸运,可以将您的解决方案从FOR循环中移出,但我不知道如何在FOR循环内部完成它。尝试了一个简单的方法,但它失败了。 :( - Lizz

-3
你可以这样使用“sed”:
echo "cat rat mat fat" | sed 's/t/p/g'  # outputs "cap rap map fap"

批处理操作未被识别? - LabRat
6
在Windows系统上,如果你不特意安装sed,它将无法被识别。需注意不要改变原意,使语言通俗易懂。 - Grhm
哦,抱歉我的错。如果你有Ruby,你可以调用 ruby -e 'puts ARGV[0].gsub("t","p")' "cat rat mat fat" - user1835027

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