作为Windows登录脚本的一部分(因此是VBScript要求),我想在用户的Google Chrome偏好设置(存储在用户配置文件中的JSON文件中)中设置值,以便在登录时应用下载设置。
我正在努力实现以下目标:
%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Preferences
)并将内容读取为字符串; 完整的JSON文件相当大,但作为用作输入的示例,这是从典型的Google Chrome prefs 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函数执行此操作,但我的RegEx知识有限。
答案 0 :(得分:3)
您可以使用正则表达式进行替换:
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":
关键字之后的一对花括号之间的所有内容。