0

我对批处理编程知之甚少。我想从字符串中删除特殊字符假设如果 String=" How:to,convert special characters" 想要转换成这个 " How-to-convert-special-characters " (如果有多个字符,如 ,; 怎么办: ) 请帮忙!谢谢

4

2 回答 2

6
@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%

但它确实有限制。您会遇到某些字符的问题,例如 ^="% 等。

于 2013-04-14T03:15:40.950 回答
2

正如 Peter Wright 建议的那样,您可以使用子字符串替换来更改单个字符,但是这种方法会保留多个字符,因此需要将多个破折号进一步更改为一个。如果您的目标是用一个破折号分隔单词,消除多个分隔字符(甚至多个空格),那么您可以使用不同的方法。

FORBatch 命令处理以空格分隔的单词(单个或多个)

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%"

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

于 2013-04-14T06:00:56.573 回答