Batch file 从批处理脚本中的字符串中删除单个字母

Batch file 从批处理脚本中的字符串中删除单个字母,batch-file,cmd,Batch File,Cmd,如何从字符串中删除所有单个字母 假设输入字符串是什么样的字符串 输出应该是什么字符串 我尝试了设置字符串=%string:?:%命令,但通配符在这里不起作用 我需要一个通用命令来删除字符串中的所有单个字母。尝试一下此功能: @echo关闭 延迟扩展 设置测试=示例1:“&^^^!|” 设置TEST2=Example2:“>>=^^^^!>=^^^^^! 你必须迭代所有字母 下面的批处理还检查字符串开始/结束 EDIT发现字符串begin/end存在缺陷,将不可避免地删除字符。 如果一行中有多个

如何从字符串中删除所有单个字母

假设输入字符串是什么样的字符串

输出应该是什么字符串

我尝试了
设置字符串=%string:?:%命令,但通配符在这里不起作用


我需要一个通用命令来删除字符串中的所有单个字母。

尝试一下此功能:

@echo关闭
延迟扩展
设置测试=示例1:“<=>&^^^!|”
设置TEST2=Example2:“>>=^^^^!>=^^^^^!
  • 你必须迭代所有字母
  • 下面的批处理还检查字符串开始/结束
EDIT发现字符串begin/end存在缺陷,将不可避免地删除字符。
如果一行中有多个字符,则只删除第一个字符,以克服for循环中重复的
%Letters%

@Echo off
Setlocal EnableExtensions EnableDelayedExpansion
Set "Letters= a b c d e f g h i j k l m n o p q r s t u v w x y z "
Set "String=i what a mess o things x"
IF "%~1" neq "" Set "String=%~1"
Echo Original  String: %String%

For %%A in (%Letters%%Letters%) Do Set "String=!String: %%A = !"
:: Echo:%String:~0,2%|Findstr /Li "%Letters%" >Nul 2>&1 && Set "String=%String:~2%"
:: Echo:%String:~-2%|Findstr /Li "%Letters%" >Nul 2>&1 && Set "String=%String:~0,-2%"

Echo Processed String: %String%
样本输出:

> RemoveSingleLetters.cmd
Original  String: i what a mess o things x
Processed String: what mess things

假设输入字符串不包含字符
^
”,并且没有相邻空格(将压缩为一个),则以下代码有效:

@echo关闭
setlocal EnableDelayedExpansion
设置“字符串=什么样的字符串”
set“new=“&set”wrd=“&set”aug=%string%”
设置“new=%aug:=”&(如果定义了wrd,则为“!wrd:~1!”==”设置“new=!new!!wrd!”)&设置“wrd=%”
回显原始文件:“%string%”
echo已修改:“%new%”
端部
要维护相邻空间,请按如下方式修改脚本:

@echo关闭
setlocal EnableDelayedExpansion
设置“字符串=多好的字符串”
set“new=“&set”wrd=“&set”aug=%string%”
设置“new=%aug:=”&(如果不是“!wrd:~1!”==”设置“new=!new!!wrd!”)&设置“wrd=%”
回显原始文件:“%string%”
echo已修改:“%new%”
端部

谢谢你的帮助

通配符在字符串替换中不起作用。@npocmaka很好,除了
*
匹配(ungreedily)搜索字符串的其余部分之外
Set“String=i多乱的o东西x”
Echo%String:*s=%
将输出
s o东西x
我认为这应该对我有好处。我试图考虑使用通配符编写更短的代码,因为它只是我的批处理脚本的一部分。但这对我来说应该可以。如果在
for
之前插入一个空格,然后在
for
之后删除空格,这种方法会更简单……比我的批处理+1更好。在Dostips.com上有关于这种自我扩展代码的参考资料吗?我第一次接触到这样的东西是从Dostips.com上获得的,而这反过来又受到了Dostips.com的启发。虽然你找不到上面答案的代码…哇!好像我打开了潘多拉的盒子<我喜欢这个修改<代码>:)
我完全爱上了这些看起来很奇怪的自我扩展代码的东西,尽管它们经常让我的大脑受伤
:-/
;谢谢你带我走这条路,@Aacini<代码>;-)不客气
:-)
如果使用一个字符设置“wrd=”
,则不需要
如果定义了wrd
部分:
设置“new=%aug:=”&(如果“!wrd:~1!”neq”“设置“new=!new!!wrd!”)&设置“wrd=%”