Вы должны войти, чтобы создавать сообщения и темы.

Замена строки, которая имеет кавычки

Здравствуйте. Имеется файл config.txt в нём следящее содержание. 

{
"Authorizations": [],
"ClientPlatform": "Windows_10.0.19045_0",
"ClientVersion": "179",
"DataRootDirectory": "C:\\ProgramData\\VPN",
"DeviceRegion": "KZ",
"EgressRegion": "RS",
"EmitDiagnosticNetworkParameters": true,
"EmitDiagnosticNotices": true,
"EmitServerAlerts": true,}
}

Необходимо заменить 7ю строку Скопировано"EgressRegion": "RS",
этим Скопировано"EgressRegion": "NL",

Нашла, как менять строку с помощью PowerShell

Спойлер
powershell "$f=(Get-Content config.txt);$f[7]=' "EgressRegion": "RS",';$f | set-content config.txt"

И этот метод действительно работает, но:
1) я не знаю как экранировать кавычки, они попросту исчезают
2) PowerShell очень медленно загружается, в отличие от batch

Помогите, пожалуйста. 

Настя, Привет.
Для cmd/bat.

powershell -Command "(Get-Content config.txt) | ForEach-Object { $_ -replace '\"EgressRegion\": \"RS\",', '\"EgressRegion\": \"NL\",' } | Set-Content config.txt"

 

Лайкнули Alex11, Psydiant и -----
Alex11Psydiant-----
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Большущее спасибо Mikhail - Работает безупречно. Огромное спасибо. Теперь понаделаю Батников и буду переключать локацию VPN батниками, это очень удобно и прекрасно. И ещё раз ГРОМАДНОЕ СПАСИБО!

Лайкнул Mikhail
Mikhail

Доброго, на .VBS без окон:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("config.txt")
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "EgressRegion"": ""RS"",", "EgressRegion"": ""NL"",")
Set objFile = objFSO.OpenTextFile("config.txt", 2)
objFile.Write strNewText
objFile.Close
Лайкнули Сергей и -----
Сергей-----

Спасибо Vlado - окна батников я скрываю с помощью NIRCMD командой Скопированоnircmd elevatecmd exec hide %~dp0Start.bat

Цитата: Настя от 20.10.2023, 10:46

Спасибо Vlado - окна батников я скрываю с помощью NIRCMD командой Скопированоnircmd elevatecmd exec hide %~dp0Start.bat

Этот код помещается в самое начало .bat файла?

Vlado Обычно я его вставляю в параметр реестра, например в автозагрузку, таким образом:

СкопированоReg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Autorun" /t REG_SZ /d "nircmd elevatecmd exec hide \"%~dp0Start.cmd\"" /f

И окно разумеется не вспыхивает

Извиняюсь Mikhail - я не совсем понятно описала, что хочу сделать. 7я строка должна меняться независимо от того, код какой страны находится в кавычках. То есть:

Скопировано"EgressRegion": "RS",

или Скопировано"EgressRegion": "PL"Скопировано,
или Скопировано"EgressRegion": "JP"Скопировано,
илиСкопировано "EgressRegion": "DE",

или вообще пустое значение Скопировано"EgressRegion": "",
должно меняться на Скопировано"EgressRegion": "NL",

Так вот для чего это нужно. Я хочу с помощью bat файлов менять сервер и в зависимости от того, к какому серверу VPN я хочу установить соединение, запускаю соответствующий батник, который будет вызываться из контекстного меню. Которое в свою очередь я планирую создать. Я долго разбиралась с пунктами контекстного меню и с тем как работать с реестром, изучая уроки Хачатура на Ютубе и освоила весь материал на примерах и создавала как однострочные пункты, так и многострочные, Но Powershell и Batch, это настоящее программирование, которое требует скрупулёзного постижения, а моих знаний пока что хватает на решение самых примитивных нужд. 

Извиняюсь. Прилепились как банный лист, со своими хотелками. Но я и в самом деле пока ещё очень далека от Poweshell и смотрю на код, как баран на новые ворота. 

Настя, вот так?, сейчас он будет заменять любое значение в кавычках на NL или любое другое, что будет туда вписано.

powershell -Command "(Get-Content config.txt) | ForEach-Object { $_ -replace '\"EgressRegion\": \".*?\",', '\"EgressRegion\": \"NL\",' } | Set-Content config.txt"

 

Лайкнули Alex11, Psydiant и -----
Alex11Psydiant-----
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Работает. Спасибо ГИГАНТСКОЕ Mikhail. Теперь всё получится. )))