如何從字符串中刪除所有單個字母?在批處理腳本中刪除字符串中的單個字母
說輸入字符串是什麼字符串
輸出應該是什麼串
我試圖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