如何使用批处理从字符串中删除特殊字符

时间:2013-04-14 02:52:34

标签: string batch-file character

我对批量编程知之甚少。我想从字符串中删除特殊字符假设如果字符串=“如何:转换特殊字符”想要转换为“如何转换特殊字符”(如果有多个字符如何,如何处理;;: )请帮忙!谢谢

2 个答案:

答案 0 :(得分:4)

@ECHO OFF
SETLOCAL
SET String=" How:to,convert special characters how to do if there are multiple characters like ,; : "
SET string1=%string:,=comma%
SET string2=%string:;=semicolon%
SET string3=%string::=fullcolon%
SET string4=%string3:;=SEMICOLON%
SET string4=%string4:,=COMMA%
SET string

简单的公式是SET varname2 =%varname1:stringtoreplace = replacement%

但确实有限制。你会遇到某些字符的问题,比如^ =“%等等。

答案 1 :(得分:0)

您可以使用子串替换来更改单个字符,正如Peter Wright建议的那样,但是此方法保留了多个字符,因此需要进一步更改多个短划线。如果您的目标是将单词与一个短划线分开,从而消除多个分隔字符(甚至多个空格),那么您可以使用不同的方法。

以空格(单个或多个)分隔的FOR批处理命令进程单词

for %%a in (one two    three      four   ) do echo %%a
one
two
three
four

您可以使用延迟扩展FOR命令处理的单词收集到一个变量中(有关详细信息,请键入set /?并查找“延迟扩展”):

setlocal EnableDelayedExpansion
set string=
for %%a in (   one   two   three   four  ) do set string=!string! %%a
echo "%string%"
" one two three four"

FOR 的标准分隔符可以是逗号,分号和等号,除了空格(单个或多个):

for %%a in (one,two= ;; ,, three  ===;;;,,,   four ) do ...

这样,您可以直接使用FOR命令来消除多个空格,逗号,分号(和等号):

for %%a in (%string%) do ...

如果你想再删除一个字符(比如冒号),你可以在同一FOR命令中用空格(或逗号,分号或等号)改变那个字符:

for %%a in (%string::=;%) do 

如果您想消除更多字符,可以先在字符串中更改所有字符,然后使用FOR

下面的批处理文件读取一个字符串并更改多个空格,逗号,分号,(等号);冒号和点,并在单词之间插入一个短划线:

@echo off
setlocal EnableDelayedExpansion
set /P input=Enter a string: 
set input=%input:.=,%
set output=
for %%a in (%input::=;%) do set output=!output!%%a-
rem Eliminate the last dash:
set output=%output:~0,-1%
echo Output: "%output%"

您必须注意,并非所有特殊字符都可以通过这种方式处理。