如何从字符串中删除所有单个字母?在批处理脚本中删除字符串中的单个字母
说输入字符串是什么字符串
输出应该是什么串
我试图set string=%string: ? : %
命令,但?
通配符不会在这里工作。
我需要一个通用命令来删除字符串中的所有单个字母。
如何从字符串中删除所有单个字母?在批处理脚本中删除字符串中的单个字母
说输入字符串是什么字符串
输出应该是什么串
我试图set string=%string: ? : %
命令,但?
通配符不会在这里工作。
我需要一个通用命令来删除字符串中的所有单个字母。
鉴于输入字符串不包含字符!
,^
和"
之一,并且不存在任何相邻的空间(这将被压缩,以一个),下面的代码工作:
@echo off
setlocal EnableDelayedExpansion
set "string=what a string"
set "new=" & set "wrd=" & set "aug=%string% "
set "new=%aug: =" & (if defined wrd if not "!wrd:~1!"=="" set "new=!new! !wrd!") & set "wrd=%"
echo original: "%string%"
echo modified: "%new%"
endlocal
To mai ntain相邻空间,修改剧本是这样的:
@echo off
setlocal EnableDelayedExpansion
set "string=what a nice string"
set "new=" & set "wrd= " & set "aug=%string% "
set "new=%aug: =" & (if not "!wrd:~1!"=="" set "new=!new! !wrd!") & set "wrd=%"
echo original: "%string%"
echo modified: "%new%"
endlocal
比我的批+1更好。 Dostips.com上是否提供了这种类型的自扩展代码? – LotPings
我第一次接触到这样的东西来自[这个答案](https://stackoverflow.com/a/32026314),而这又受到[This DosTips post]的启发(http:// www。 dostips.com/forum/viewtopic.php?f=3&t=6429&p=41356#p41356)。虽然你不会找到上述答案的代码... – aschipfl
哇!看来我打开了潘多拉盒子! **'^ _ ^'**我喜欢这个修改!**'')** ** – Aacini
提供此功能的尝试:
@echo off
setlocal enabledelayedexpansion
SET TEST=Example1 : "<=> & ^^^! |"
SET TEST2=Example2 : ">>=^^^!>=^^^!<====<^^^!<=^^^!<=<=<&&<=^^^!<=<=|<&^=^=^!<||&==="
Set TEST3=Example3 : "?????? Hello ??????"
echo;%TEST% before Replace
call :ReplaceSpecialChar TEST "_"
echo;%TEST% after Replace
echo;
echo;%TEST2% before Replace
call :ReplaceSpecialChar TEST2 "_"
echo;%TEST2% after Replace
echo;
echo;%TEST3% before Replace
call :ReplaceSpecialChar TEST3 " "
echo;%TEST3% after Replace
pause>nul&exit
:ReplaceSpecialChar
call :ReplaceSpecialCharTmp %1 "?" %2
call :ReplaceSpecialCharTmp %1 "&" %2
call :ReplaceSpecialCharTmp %1 "<" %2
call :ReplaceSpecialCharTmp %1 ">" %2
call :ReplaceSpecialCharTmp %1 "|" %2
call :ReplaceSpecialCharTmp %1 "=" %2
call :ReplaceSpecialCharTmp %1 "^^^!" %2
goto :eof
:ReplaceSpecialCharTmp
set work=!%1!
set /a i = 0
:ReplaceLoop
if "!work:~%i%,1!"=="" (set %1=!work!&goto :eof)
if not "!work:~%i%,1!"=="%~2" (set /a i += 1&goto ReplaceLoop)
set head=!work:~0,%i%!
set /a i += 1
set work=!head!%~3!work:~%i%!
goto :ReplaceLoop
编辑发现了一个字符串开始/结束的缺陷,他们将不可避免地删除一个字符。
如果一行中有一个以上的字符,只有第一个字符将被删除,以便在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
我认为这对我应该是件好事。我试图用通配符思考较短的代码,因为它只是我的批处理脚本的一部分。但是这应该为我做这项工作。 –
这种方法会比较简单,如果在'for'之前,你在开始和结束时插入一个空格,并在'for'之后删除它们... – Aacini
通配符在字符串替换中不起作用。 – npocmaka
@npocmaka除了'*'匹配(不合理)的一切,直到搜索字符串的其余部分。 'Set'String =我什么东西混乱的东西x“'和'Echo%String:* s =%'会输出东西x' – LotPings