首页 > 解决方案 > 批处理:如果是某个字符,则仅替换字符串中的第一个字符

问题描述

我有几个这样的数据线:

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   

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

我的第一次尝试只是删除-spaces导致一个不好看的结果,因为 ALL-被替换:

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

标签: stringbatch-filesubstring

解决方案


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

%TMP:~n,m%

将从中提取m字符TMP,从nth开始,其中计数从零开始。(您也可以省略,m获取“字符串的其余部分”并使用负数表示“从字符串的末尾开始”——有关更多详细信息,请参阅 的输出SET /?)。

在您的情况下,类似以下内容应该可以工作:

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

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


推荐阅读