【问题标题】:特殊字符后的批量字符串替换
【发布时间】:2022-01-22 20:25:27
【问题描述】:

批量中,如何替换特殊字符后的子字符串。

@echo off

set var1=abc_123
set var2=%var1:*_=%
echo %var2%

set var1=abc_123
set var3=%var1:_*=%
echo %var3%

输出:

123
abc_123

set var2=%var1:*_=% 中,*abc 匹配,但在set var3=%var1:_*=% 中不起作用!

这两种用法有什么区别? 如何使用* 或其他东西来替换_123

【问题讨论】:

  • 第一部分中的搜索表达式*_表示»直到第一个_«,因为*在开头,而搜索表达式第二部分中的_* 表示»_ 后跟*«...

标签: windows batch-file


【解决方案1】:

使用搜索/替换语法是不可能的,因为星号仅当它是搜索表达式中的第一个字符时才用作通配符,在任何其他位置它都被视为普通字符。

但是对于单个字符,可以使用 FOR /F 循环来完成。
它通过分隔符将文本拆分为标记。

FOR /F "tokens=1,* delims=_" %%L in ("%var1%") DO (
  set var3=%%L
)
echo %var3%

【讨论】:

  • 它有效。但我也想知道为什么我发布的代码不起作用。因为replace比for更简单。
  • @stonecutter 你认为六行代码比一行代码简单吗?我强烈建议您学习如何使用 FOR F 命令,因为它可以用于很多技巧。
【解决方案2】:

如果您正在寻找更简单的方法,那么也许这就是您想要实现的目标:

Set "var1=abc_123"
Echo(%var1%
Set "var2=%var1:*_=%"
Echo(%var2%
Set "var3=%var1:_="&:"%"
Echo(%var3%

更简单当然只指使用扩展和替换,而不是对技术的理解。如果您想了解更多有关该技术的信息,请查看this external site thread 中的示例。

【讨论】:

  • 感谢您让未来的读者知道这解决了您提出的问题。但是,我只是想,我会提到您的问题要求“特殊字符后的子字符串”。因此,如果初始变量是abc__123,则_ 之后的子字符串将是_123,在此之前是abc,这正是我上面的代码所做的。但是,您现在接受的 for 方法将返回 123abc,其方式与 abc_123 的初始值完全相同!有区别。
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多