文字列からすべての文字を削除するにはどうすればよいですか?バッチスクリプトの文字列から単一文字を削除する
は、入力文字列が文字列
出力は私がset string=%string: ? : %
コマンドを試してみましたが、?
ワイルドカードは、ここでは動作しませんどのような文字列
どうあるべきかであると言います。
文字列からすべての1文字を削除するには、汎用コマンドが必要です。
文字列からすべての文字を削除するにはどうすればよいですか?バッチスクリプトの文字列から単一文字を削除する
は、入力文字列が文字列
出力は私がset string=%string: ? : %
コマンドを試してみましたが、?
ワイルドカードは、ここでは動作しませんどのような文字列
どうあるべきかであると言います。
文字列からすべての1文字を削除するには、汎用コマンドが必要です。
入力文字列が文字!
、^
と"
の1が含まれていないことを考えると、に圧縮されるだろう(何の隣接スペースがないこと1)、次のコードが動作します。
@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、このようなスクリプトを変更:hintためAaciniへ
@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)でした。これは[こちらのDosTips投稿](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
EDITをチェックし、すべての文字
%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'の前にbeginとendのスペースを挿入し、' for'の後にスペースを挿入すると簡単になります。 – Aacini
ワイルドカードが文字列置換で機能していません。 – npocmaka
@npocmaka '*'を除いて、検索文字列の残りの部分まですべてを一致させます。 'Set" String =私は何を混乱させるのでしょうか? ''と '' Echo%String:* s =% 'は' s things x'を出力します。 – LotPings