2

文字列内の文字列を見つけて3番目の文字列に置き換えるサブをバッチで作成しようとしています。調べてみると、コマンドで文字列を消去できることがわかりました。SET

だから、これが私が試したことです:

:modifyString what with [in]
SET _what=%~1
ECHO "%_what%"
SET "_with=%~2
ECHO "%toWith%"
SET _In=%~3
ECHO "%_In%"
SET _In=%_In:%toWhat%=%toWith%%
ECHO %_In%
SET "%~3=%_In%"
EXIT /B

ECHO「デバッグ」の目的でのみ存在します。

私が知っているのは、エラーが発生しているということです...

SET _In=%_In:%toWhat%=%toWith%%

%_in%...変数を閉じる%文字のため。

…などもやってみました

SET _In=%_In:!toWhat!=!toWith!%
SET _In=!_In:%toWhat%=%toWith%!

...そして他の人は無意味です。

これが主な問題であり、もう1つはに戻ること%_In%です[in]

任意のヒント?

4

2 に答える 2

4

!これは、 DelayedExpansionメソッドを使用した例です。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "xxString=All your base are belong to us"
set "xxSubString=your base are belong"
set "xxNewSubString=of your bases belong"
echo Before
set xx
echo.
set "xxString=!xxString:%xxSubString%=%xxNewSubString%!"
echo After
set xx
endlocal
pause >nul

出力

Before
xxNewSubString=of your bases belong
xxString=All your base are belong to us
xxSubString=your base are belong

After
xxNewSubString=of your bases belong
xxString=All of your bases belong to us
xxSubString=your base are belong

あなたを修正しました

@echo off
:: Make sure that you have delayed expansion enabled.
setlocal EnableDelayedExpansion

:modifyString what with [in]
SET "_what=%~1"
SET "_with=%~2"
SET "_In=%~3"
ECHO "%_what%"
ECHO "%_with%"
ECHO "%_In%"
:: The variable names were not the same as the ones
:: defined above.
SET _In=!_In:%_what%=%_with%!
ECHO %_In%

:: This will not change the value of the 3rd parameter
:: but instead will create a new parameter with the
:: value of %3 as the variable name.
SET "%~3=%_In%"
endlocal
EXIT /B

拡張を遅らせずに部分文字列を置き換える方法。このコマンドを使用して、call2つのレベルの変数展開を作成します。シングル%アラウンド変数を使用して最初に展開し、ダブル%%アラウンド変数を使用して2番目に展開します。

@echo off
setlocal EnableExtensions
set "xxString=All your base are belong to us"
set "xxSubString=your base are belong"
set "xxNewSubString=of your bases belong"
echo Before
set xx
echo.
call set "xxString=%%xxString:%xxSubString%=%xxNewSubString%%%"
echo After
set xx
endlocal
pause >nul
于 2013-02-02T14:54:36.943 に答える
2

みんなありがとう!

私が最終的に作ったものをあなたに貼り付けます:

:modifyString what with in tRtn
set "_in=%~3"
set "_in=!_in:%~1=%~2!"
IF NOT "%~4" == "" SET %~4=%_in%
EXIT /B

EGこのサブをこのように呼び出すと:

SET "str=All your base are belong to us"
SET "toFind=your base are belong"
SET "space=of your bases belong"
ECHO %str%
CALL :modifyString "%toFind%" "%space%" "%str%" string

%string%は新しい修正された文字列になるので、そうすると...

ECHO "%string%"

印刷されます:

"All of your bases belong to us"

PS遅れてすみませんが、評判が悪いので待たされました!

于 2013-02-02T23:17:34.287 に答える