批处理:如果是某个字符,则仅替换字符串中的第一个字符

Posted

技术标签:

【中文标题】批处理:如果是某个字符,则仅替换字符串中的第一个字符【英文标题】:Batch: Replacing just the first character in a string if it is a certain character 【发布时间】:2020-04-10 21:02:46 【问题描述】:

我有几个这样的数据线:

v1.4.00.29                                                           
- SP.CNG v1.0.2.2                                                           
Update Kit - Secure USB Token v1.1.1.1                                                           
- HI_3997 v1.0.3997.1                                                           
- HI_4009 v1.0.4009.1                                                           
- HI_3585 v1.0.3585                                                           
Update Kit - RM4 v1.0.1202.4                                                           
Update Kit - DN Series v1.0.4.1   

是否有一些简单的方法可以检查第一个字符是否为-,然后删除这个加上它们旁边的空格,以便该行与其他行对齐。

我的第一次尝试只是删除了-spaces,结果因为所有-都被替换了,所以结果看起来不太好:

set tmp=!tmp:-=!
set tmp=!tmp: =!

【问题讨论】:

为什么不简单地删除“破折号+空格”(set tmp=!tmp:- =!)而不是删除每个破折号和每个空格? 然后他也删除了 i there is a DAsh and SPACE at different position ...这可能是也可能不是一个好主意。如果没有,TripeHound 的解决方案是最好只在开始时删除它们。 (我只是想知道你为什么单独删除两个字符而不是它们的组合) 为了与其他行对齐,我建议最好在任何以 - 开头的行前添加 11 个空格! 【参考方案1】:

您可以使用引用环境变量的“子字符串”方法来执行此操作。简而言之:

%TMP:~n,m%

将从TMP 中提取m 字符,从nth 开始,其中计数从零开始。 (您也可以省略 ,m 来获取“字符串的其余部分”,并使用负数表示“从字符串的末尾”——查看输出SET /? 了解更多详情)。

在您的情况下,应该可以使用以下方法:

if "%TMP:~0,2%" == "- "     set "TMP=%TMP:~2%"

这将检查前两个字符是否是减号和空格(如果需要,您可以将其放宽为仅检查第一个字符)。如果有匹配项,它会将TMP 替换为以第三个字符开头的所有字符(0=1st1=2nd 等)。

【讨论】:

@SRel 虽然它们有时可能很繁琐,但子字符串命令可能非常强大。例如,对于SET Y=4SET STR=abcdefghecho !STR:~%Y%,1! 将提取第 5 个字母 (e)。 (提供setlocal enabledelayedexpansion 有效)。【参考方案2】:

您可能想尝试以下使用sub-string substitution 的代码(要处理的字符串存储在变量tmp 中):

if "- !tmp:*- !"=="!tmp!" set "tmp=!tmp:*- =!"

这将从字符串中删除直到并包括第一次出现- + SPACE 的所有内容,并在结果前面加上- + SPACE;如果这现在等于原始字符串,那么第一个 - + SPACE 必须在开头,所以删除它;否则不要更改字符串。

【讨论】:

以上是关于批处理:如果是某个字符,则仅替换字符串中的第一个字符的主要内容,如果未能解决你的问题,请参考以下文章

sql怎么替换字符串中的某个字符

java字符串中怎么去掉指定字符的前一个字符

C语言简单的字符串、字符处理问题求助

如果字符串以某个字符开头,则替换它

java怎么把一个字符串中的字符替换成别

处理c字符串时如何用当前输入替换用户的第一个输入