从字符串中替换子字符串

时间:2016-11-07 07:43:10

标签: batch-file

我是批处理脚本的新手,并搜索了所有可用的资料,但我没有得到满意的答案。

我有一个名为 find_str 的字符串,其中包含以下内容

  

的baseUrl:{发展: “https://myserver.example:1234”}

我想用http://localhost:8084

替换开发中给出的url

所以输出应该看起来像

  

的baseUrl:{发展: “http://localhost:8084”}

我有一个名为

的变量

find_string,其中包含https://myserver.example:1234和一个名为

的变量

具有http://localhost:8084

的replacestr

我已提及此网站Replace a substring using string substitution

但是要替换的字符串是硬编码的,我希望替换字符串来自上面给出的变量,并希望将整个结果存储在第三个变量中。

我尝试了以下内容:

setlocal ENABLEDELAYEDEXPANSION
For /F "tokens=1* delims==" %%A IN (environment.properties) DO (
    IF "%%A"=="url" set replacestr=%%B
)

set /p find_str=<%~dp0application\app\common\common.config.js

set cmd="echo %find_str:~92,37%"

FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET find_string=%%i

echo !find_string!

echo !replacestr!

break>%~dp0portfolio-analyzer\app\common\common.config.js
set _result=%find_str:=!replacestr!%

>> %~dp0portfolio-analyzer\app\common\common.config.js echo %_result%

pause

但它并没有用它的值替换find_str。

提前致谢。

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "find_str=baseUrl:{development:"https://myserver.example:1234"}"
SET "replacestr=http://localhost:8084"

SET "critical_str=%find_str:*"=%"
:: don't know whether we need to simply remove the last 2 chars
:: or replace both `"` and `}` with nothing
SET "critical_str=%critical_str:"=%"
SET "critical_str=%critical_str:}=%"
SET "original_str=%find_str%"
:: replace colons
SET "critical_str=%critical_str::=`%"
SET "original_str=%original_str::=`%"

CALL set "result_str=%%original_str:%critical_str%=%replacestr%%%"
:: substitute-back
SET "result_str=%result_str:`=:%"
set|FIND /i "str="

GOTO :EOF

这不是一个简单的问题。它涉及:的体操,以防止:被不恰当地解释。

现在我有几秒钟的时间思考......

:: Using delayedexpansion
SETLOCAL ENABLEDELAYEDEXPANSION

SET "critical_str=%find_str:*"=%"
SET "critical_str=%critical_str:~0,-2%"
SET "result_str=!find_str:%critical_str%=%replacestr%!"

set|FIND /i "str="