1

私は次の文字列を持っています

set str=aaaaa,bbbbb,ccccc,dddd

,文字列の最初(カンマ)から最後まですべてを置き換える必要があります。しかし、文字列がどのように始まるのかわかりません。

文字列の先頭にないため、*ワイルドカードを使用できません。そのため、次のようになります-

set str=%str:,*=% >>>> Will not work

何か案は ?バッチスクリプトである必要があります

4

2 に答える 2

3

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 つだけです。

于 2013-01-14T14:46:52.217 に答える
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!
于 2013-01-14T11:30:00.783 に答える