私は次の文字列を持っています
set str=aaaaa,bbbbb,ccccc,dddd
,
文字列の最初(カンマ)から最後まですべてを置き換える必要があります。しかし、文字列がどのように始まるのかわかりません。
文字列の先頭にないため、*ワイルドカードを使用できません。そのため、次のようになります-
set str=%str:,*=% >>>> Will not work
何か案は ?バッチスクリプトである必要があります
私は次の文字列を持っています
set str=aaaaa,bbbbb,ccccc,dddd
,
文字列の最初(カンマ)から最後まですべてを置き換える必要があります。しかし、文字列がどのように始まるのかわかりません。
文字列の先頭にないため、*ワイルドカードを使用できません。そのため、次のようになります-
set str=%str:,*=% >>>> Will not work
何か案は ?バッチスクリプトである必要があります
FORループを回避する非常にシンプルで高速な解決策があります。検索と置換を使用して、各コンマに連結されたREMコマンドを挿入します:-)
@echo off
set str=aaaaa,bbbbb,ccccc,dddd
set "str=%str:,="&rem %
echo str=%str%
説明
展開が行われる前の重要なコード行は次のとおりです。
set "str=%str:,="&rem %
そして、変数展開後に行が変換されるものは次のとおりです。
set "str=aaaaa"&rem bbbbb"&rem ccccc"&rem dddd
これは SET ステートメントになり、その後に REM ステートメントが続きます。演算子を使用すると、複数の&
コマンドを 1 行にまとめることができます。最初の REM の後のすべてがコメントの一部と見なされるため、REM ステートメントは 1 つだけです。
最初のカンマ以降のすべてを削除するには、使用できます
@echo off
setlocal enabledelayedexpansion
set str=aaaaa,bbbbb,ccccc,dddd
for /f "delims=," %%a in ("%str%") do (
set str=%%a
echo !str!
)
pause >nul
置き換えるには、単にそれを取り除き、最後に新しい文字列を追加します
set str=%%a,new,string
アップデート
これは同じことを行いますが、for
ループはありません
@echo off
setlocal enabledelayedexpansion
set str=aaaaa,bbbbb,ccccc,dddd
set strip=%str%
set length=0
set start=0
set new=
:loop
if defined strip (
set strip=!strip:~1!
set /a length+=1
goto :loop
)
:comma
if %length% gtr 0 (
call :add !start!
if "!char!"=="," (
goto :break
) else (
set new=!new!!char!
set /a length-=1
set /a start+=1
goto comma
)
)
:break
echo %new%
pause >nul
:add
set char=!str:~%1,1!