替换文本包含批处理脚本中的键值对

问题描述 投票:1回答:1
@echo off 
setlocal enableextensions disabledelayedexpansion
set "search=EikonPath"
set "replace=EikonPath": "D:\\e5\\desktopframework\\src\\products\\eikon-on-electron"
set "textFile=D:\e4\office-shim\src\eikon-office-shim\config\install-settings.json"

for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    >>"%textFile%" echo(!line:%search%=%replace%!
    endlocal
)

替换为:

"EikonPath": "%LOCALAPPDATA%\\Refinitiv\\Refinitiv Workspace"

至:

"EikonPath": "D:\\e5\\desktopframework\\src\\products\\eikon-on-electron"

以上方法给出:

"EikonPath": "D:\\e5\\desktopframework\\src\\products\\eikon-on-electron": "%LOCALAPPDATA%\\Refinitiv\\Refinitiv Workspace",
windows batch-file batch-rename
1个回答
0
投票

您不应该替换文件inline。最好将输出重定向到一个临时文件,然后替换原始文件。

另一个问题,您不仅尝试替换搜索字符串,还希望替换搜索字符串和该行的其余部分。我更改了代码,将整个行替换为repalce变量

@echo off 
setlocal enableextensions disabledelayedexpansion
set "search=EikonPath"
set "replace=EikonPath": "D:\\e5\\desktopframework\\src\\products\\eikon-on-electron"
set "textFile=test.json"

(
    for /f "delims=" %%i in (%textFile%) do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        if "!line:%search%=!" NEQ "!line!" (
            echo(!replace!
        ) ELSE (
            echo(!line!
        )
        endlocal
    )
) > newfile.tmp
© www.soinside.com 2019 - 2024. All rights reserved.