Пакетный скрипт для чтения ключей и обновления значения - PullRequest
0 голосов
/ 23 мая 2019
{
    "productVersion": "1.7.0",
    "examplePath": "somepath",
    "exampleBootloaderScript": "addin.js",
    "cachePath": "%APPDATA%\\example\\example",
    "logPath": "%APPDATA%\\example\\example\\Product\\Logs",
    "logLevel": "Info",
    "tempExcelCachePath": "%LOCALAPPDATA%\\example\\example5\\Cache",
    "exampleArgs": [
        "--devmenu",
        "--allow-insecure-localhost"
    ]
}

Я хочу прочитать вышеуказанный файл и обновить значение ключа examplePath до следующего:

{
    "productVersion": "1.7.0",
    "examplePath": "D:\workspace\e5\sample\src\products\sample",
    "exampleBootloaderScript": "addin.js",
    "cachePath": "%APPDATA%\\example\\example",
    "logPath": "%APPDATA%\\example\\example\\Product\\Logs",
    "logLevel": "Info",
    "tempExcelCachePath": "%LOCALAPPDATA%\\example\\example5\\Cache",
    "exampleArgs": [
        "--devmenu",
        "--allow-insecure-localhost"
    ]
}

Как мне это сделать с помощью файла bat?

1 Ответ

1 голос
/ 23 мая 2019

Если somepath будет всегда статичным:

@echo off
set "_infile=YOURFILENAME HERE"
set "_strfind=somepath"
set "_strinsert=D:\workspace\e5\sample\src\products\sample"
for /f "tokens=2 delims=]" %%a in ('type "%_infile%" ^| find /v /n "" ^& break ^> "%_infile%"') do (
        set "str=%%a"
        call set "str=%%str:%_strfind%=%_strinsert%%%"
        setlocal enabledelayedexpansion
        echo(!str! >>%_infile%
        endlocal
)
type %_infile%

Если somepath может быть чем-либо, нам нужно быть более конкретным и сосредоточиться на ключе, поэтому это будет работать ТОЛЬКО, если файл находится в точном формате, как вы опубликовали! Как мы берем ключ по позиции в строке.

Поэтому, прежде чем продолжить, сделайте резервную копию вашего файла, так как это сломает его, если ваш формат не соответствует тому, который вы опубликовали.

@echo off
set "_infile=YOURFILENAME HERE"
set "_strfind=examplePath"
set "_strinsert=    "examplePath": "D:\workspace\e5\sample\src\products\sample!","
for /f "tokens=2 delims=]" %%a in ('type "%_infile%" ^| find /v /n "" ^& break ^> "%_infile%"') do (
        set "str=%%a"
        setlocal enabledelayedexpansion
        if "!str:~5,11!"=="%_strfind%" (
            setlocal disabledelayedexpansion
            set "str=%_strinsert%"
        )
        setlocal enabledelayedexpansion
        echo(!str! >>%_infile%
        endlocal
)
type %_infile%

Наконец, причина, по которой я использую delayedexpansion в некоторых частях, заключается в том, чтобы просто обслуживать строки, содержащие !.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...