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

String 如何使用批处理从字符串中删除特殊字符,string,batch-file,character,String,Batch File,Character,我对批处理编程知之甚少。我想从字符串中删除特殊字符假设string=“How:to,convert special characters”想要转换为“How to convert special characters”(如果有多个字符,如,;:,如何转换),请提供帮助!谢谢 @ECHO OFF SETLOCAL SET String=" How:to,convert special characters how to do if there are multiple characters lik

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

@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
简单公式设置为varname2=%varname1:stringtoreplace=replacement%


但它确实有局限性。你会遇到某些角色的问题,比如^=%等。

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

批处理命令的
处理由空格分隔的单词(单个或多个):

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

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

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

如果还想再删除一个字符(如冒号),可以在相同的
FOR
命令中按空格(或逗号、分号或等号)更改该字符:

for %%a in (%string::=;%) do 
如果要删除更多字符,可以先更改字符串中的所有字符,然后对
使用

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

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

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

谢谢,这正是我想要的。我会花时间让我理解,但现在我可以直接使用这段代码。我很高兴再次感谢你!但是像(){}[]*^/\这样的字符呢?有没有可能用同样的方法移除它们?现在对我来说很有效。我需要在代码中添加什么吗谢谢
for %%a in (one,two= ;; ,, three  ===;;;,,,   four ) do ...
for %%a in (%string%) do ...
for %%a in (%string::=;%) do 
@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%"