2016-11-07 3 views
-1

Я новичок в Batch scripting и просмотрел все доступные материалы, но я не получил удовлетворительного ответа.Заменить подстроки из строки

У меня есть строка с именем find_str, которая имеет следующее содержание

BaseUrl: {развитие: "https://myserver.example:1234"}

Я хочу, чтобы заменить URL, приведенные в развитии с http://localhost:8084

Таким образом, выход должен быть похож на

BaseUrl: {развитие: "http://localhost:8084"}

У меня есть переменная

find_string который имеет https://myserver.example:1234 и переменную

replacestr, который имеет http://localhost:8084

я говорил на этот сайт 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 с его значением.

Заранее спасибо.

+0

Вы должны показать, что вы пытались и описать, что именно у вас есть проблемы с! – aschipfl

+2

Возможный дубликат [пакетного скрипта заменить строку переменной в строке] (http://stackoverflow.com/questions/11924575/batch-script-replace-variable-string-within-string) – JosefZ

+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=" 
Смежные вопросы