使用VBScript发现和JSON文件中替换节点的花括号之间的所有多行文本(Using VBScri

2019-07-04 04:13发布

作为Windows登录脚本(因此VBScript的要求)的一部分,我想在用户的谷歌Chrome的偏好设置(存储在用户配置一个JSON文件)来设定值时,他们登录到应用下载设置。

我试图实现以下目标:

  1. 打开一个JSON文件( %userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Preferences ),并读取其中的内容为一个字符串;
  2. 搜索名为“下载”的特定节点,其通过预先填充与可以构建之间变化的多线的值;
  3. 替换指定的多行文本的括号之间的整个文本; 和
  4. 写更新后的字符串到原始文件和保存。

完整的JSON文件是相当大的,但作为一个样本作为输入使用,这是从一个典型的谷歌浏览器的首选项JSON文件复制:

"bookmark_bar": {
    "show_on_all_tabs": false
},
"download": {
    "directory_upgrade": true,
    "prompt_for_download": false
},
"sync": {
    "suppress_start": true
},

我想以编程方式搜索“下载”节点,只是这个节点的括号之间的替代一切,所以它的内容:

"download": {
    "default_directory": "C:\\Windows\\Temp",
    "extensions_to_open": "pdf",
    "prompt_for_download": false
},

......随着该文件的内容不变休息。

鉴于在JSON的部分空白和多条线路进行更换,以及通配符要求包括所有/括号之间的任何文本,我无法使用VBScript的Replace函数做到这一点,但我的正则表达式的知识是有限的。

Answer 1:

你可以使用正则表达式替换:

prefsFile = "%userprofile%\Local Settings\...\Preferences"
prefsFile = CreateObject("WScript.Shell").ExpandEnvironmentStrings(prefsFile)

newPrefs = "..."

Set fso = CreateObject("Scripting.FileSystemObject")

json = fso.OpenTextFile(prefsFile).ReadAll

Set re = New RegExp
re.Pattern = """download"": {[\s\S]*?},"

json = re.Replace(json, """download"": {" & vbCrLf & newPrefs & vbCrLf & "},")

fso.OpenTextFile(prefsFile, 2).Write(json)

图案[\s\S]任何空白或非空白字符相匹配。 不能使用. 在这种情况下,由于特殊字符不匹配换行符,你想表达,以跨越多行。 预选赛*? 意思是“匹配任何数量的字符”和“用最短匹配”的分别。 这样的表达式匹配后的一对大括号之间的一切"download":关键词。



文章来源: Using VBScript to find and replace all multi-line text between curly braces of a node within a JSON file