批处理:如果是某个字符,则仅替换字符串中的第一个字符
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
字符,从n
th 开始,其中计数从零开始。 (您也可以省略 ,m
来获取“字符串的其余部分”,并使用负数表示“从字符串的末尾”——查看输出SET /?
了解更多详情)。
在您的情况下,应该可以使用以下方法:
if "%TMP:~0,2%" == "- " set "TMP=%TMP:~2%"
这将检查前两个字符是否是减号和空格(如果需要,您可以将其放宽为仅检查第一个字符)。如果有匹配项,它会将TMP
替换为以第三个字符开头的所有字符(0
=1st、1
=2nd 等)。
【讨论】:
@SRel 虽然它们有时可能很繁琐,但子字符串命令可能非常强大。例如,对于SET Y=4
和SET STR=abcdefgh
,echo !STR:~%Y%,1!
将提取第 5 个字母 (e
)。 (提供setlocal enabledelayedexpansion
有效)。【参考方案2】:
您可能想尝试以下使用sub-string substitution 的代码(要处理的字符串存储在变量tmp
中):
if "- !tmp:*- !"=="!tmp!" set "tmp=!tmp:*- =!"
这将从字符串中删除直到并包括第一次出现-
+ SPACE 的所有内容,并在结果前面加上-
+ SPACE;如果这现在等于原始字符串,那么第一个 -
+ SPACE 必须在开头,所以删除它;否则不要更改字符串。
【讨论】:
以上是关于批处理:如果是某个字符,则仅替换字符串中的第一个字符的主要内容,如果未能解决你的问题,请参考以下文章