Замена строки, которая имеет кавычки
Цитата: ----- от 20.10.2023, 09:55Здравствуйте. Имеется файл 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
[spoiler title=""]powershell "$f=(Get-Content config.txt);$f[7]=' "EgressRegion": "RS",';$f | set-content config.txt"[/spoiler]
И этот метод действительно работает, но:
1) я не знаю как экранировать кавычки, они попросту исчезают
2) PowerShell очень медленно загружается, в отличие от batchПомогите, пожалуйста.
Здравствуйте. Имеется файл 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
И этот метод действительно работает, но:
1) я не знаю как экранировать кавычки, они попросту исчезают
2) PowerShell очень медленно загружается, в отличие от batch
Помогите, пожалуйста.
Цитата: Mikhail от 20.10.2023, 10:13Настя, Привет.
Для cmd/bat.powershell -Command "(Get-Content config.txt) | ForEach-Object { $_ -replace '\"EgressRegion\": \"RS\",', '\"EgressRegion\": \"NL\",' } | Set-Content config.txt"
Настя, Привет.
Для cmd/bat.
powershell -Command "(Get-Content config.txt) | ForEach-Object { $_ -replace '\"EgressRegion\": \"RS\",', '\"EgressRegion\": \"NL\",' } | Set-Content config.txt"
Цитата: ----- от 20.10.2023, 10:40Большущее спасибо Mikhail - Работает безупречно. Огромное спасибо. Теперь понаделаю Батников и буду переключать локацию VPN батниками, это очень удобно и прекрасно. И ещё раз ГРОМАДНОЕ СПАСИБО!
Большущее спасибо Mikhail - Работает безупречно. Огромное спасибо. Теперь понаделаю Батников и буду переключать локацию VPN батниками, это очень удобно и прекрасно. И ещё раз ГРОМАДНОЕ СПАСИБО!
Цитата: Vlado от 20.10.2023, 10:41Доброго, на .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
Доброго, на .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
Цитата: ----- от 20.10.2023, 10:46Спасибо Vlado - окна батников я скрываю с помощью NIRCMD командой
nircmd elevatecmd exec hide %~dp0Start.bat
Спасибо Vlado - окна батников я скрываю с помощью NIRCMD командой Скопированоnircmd elevatecmd exec hide %~dp0Start.bat
Цитата: Vlado от 20.10.2023, 11:07Цитата: Настя от 20.10.2023, 10:46Спасибо Vlado - окна батников я скрываю с помощью NIRCMD командой
nircmd elevatecmd exec hide %~dp0Start.batЭтот код помещается в самое начало .bat файла?
Цитата: Настя от 20.10.2023, 10:46Спасибо Vlado - окна батников я скрываю с помощью NIRCMD командой
Скопированоnircmd elevatecmd exec hide %~dp0Start.bat
Этот код помещается в самое начало .bat файла?
Цитата: ----- от 20.10.2023, 11:20Vlado Обычно я его вставляю в параметр реестра, например в автозагрузку, таким образом:
Reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Autorun" /t REG_SZ /d "nircmd elevatecmd exec hide \"%~dp0Start.cmd\"" /fИ окно разумеется не вспыхивает
Vlado Обычно я его вставляю в параметр реестра, например в автозагрузку, таким образом:
СкопированоReg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Autorun" /t REG_SZ /d "nircmd elevatecmd exec hide \"%~dp0Start.cmd\"" /f
И окно разумеется не вспыхивает
Цитата: ----- от 20.10.2023, 16:39Извиняюсь Mikhail - я не совсем понятно описала, что хочу сделать. 7я строка должна меняться независимо от того, код какой страны находится в кавычках. То есть:
"EgressRegion": "RS",или
"EgressRegion": "PL",
или"EgressRegion": "JP",
или"EgressRegion": "DE",
или вообще пустое значение"EgressRegion": "",
должно меняться на"EgressRegion": "NL",Так вот для чего это нужно. Я хочу с помощью bat файлов менять сервер и в зависимости от того, к какому серверу VPN я хочу установить соединение, запускаю соответствующий батник, который будет вызываться из контекстного меню. Которое в свою очередь я планирую создать. Я долго разбиралась с пунктами контекстного меню и с тем как работать с реестром, изучая уроки Хачатура на Ютубе и освоила весь материал на примерах и создавала как однострочные пункты, так и многострочные, Но Powershell и Batch, это настоящее программирование, которое требует скрупулёзного постижения, а моих знаний пока что хватает на решение самых примитивных нужд.
Извиняюсь. Прилепились как банный лист, со своими хотелками. Но я и в самом деле пока ещё очень далека от Poweshell и смотрю на код, как баран на новые ворота.
Извиняюсь Mikhail - я не совсем понятно описала, что хочу сделать. 7я строка должна меняться независимо от того, код какой страны находится в кавычках. То есть:
Скопировано"EgressRegion": "RS",
или Скопировано"EgressRegion": "PL"Скопировано,
или Скопировано"EgressRegion": "JP"Скопировано,
илиСкопировано "EgressRegion": "DE",
или вообще пустое значение Скопировано"EgressRegion": "",
должно меняться на Скопировано"EgressRegion": "NL",
Так вот для чего это нужно. Я хочу с помощью bat файлов менять сервер и в зависимости от того, к какому серверу VPN я хочу установить соединение, запускаю соответствующий батник, который будет вызываться из контекстного меню. Которое в свою очередь я планирую создать. Я долго разбиралась с пунктами контекстного меню и с тем как работать с реестром, изучая уроки Хачатура на Ютубе и освоила весь материал на примерах и создавала как однострочные пункты, так и многострочные, Но Powershell и Batch, это настоящее программирование, которое требует скрупулёзного постижения, а моих знаний пока что хватает на решение самых примитивных нужд.
Извиняюсь. Прилепились как банный лист, со своими хотелками. Но я и в самом деле пока ещё очень далека от Poweshell и смотрю на код, как баран на новые ворота.
Цитата: Mikhail от 20.10.2023, 17:02Настя, вот так?, сейчас он будет заменять любое значение в кавычках на NL или любое другое, что будет туда вписано.
powershell -Command "(Get-Content config.txt) | ForEach-Object { $_ -replace '\"EgressRegion\": \".*?\",', '\"EgressRegion\": \"NL\",' } | Set-Content config.txt"
Настя, вот так?, сейчас он будет заменять любое значение в кавычках на NL или любое другое, что будет туда вписано.
powershell -Command "(Get-Content config.txt) | ForEach-Object { $_ -replace '\"EgressRegion\": \".*?\",', '\"EgressRegion\": \"NL\",' } | Set-Content config.txt"