我对批处理编程知之甚少。我想从字符串中删除特殊字符假设如果 String=" How:to,convert special characters" 想要转换成这个 " How-to-convert-special-characters " (如果有多个字符,如 ,; 怎么办: ) 请帮忙!谢谢
问问题
16422 次
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 建议的那样,您可以使用子字符串替换来更改单个字符,但是这种方法会保留多个字符,因此需要将多个破折号进一步更改为一个。如果您的目标是用一个破折号分隔单词,消除多个分隔字符(甚至多个空格),那么您可以使用不同的方法。
FOR
Batch 命令处理以空格分隔的单词(单个或多个):
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 回答