我需要使用“某些东西”,可能是* .bat或* .vbs或两者的组合。 场景:我有一个aprox 200用户的环境。它们还具有针对特定应用程序的生产环境以及此应用程序的测试环境。
有一个文件(* .ini)文件已将“设备ID”从生产环境中拉到测试环境中。
测试环境中的* .ini文件需要更改一个字符才能在测试环境中正常工作。但是这两百个电脑中的每一个都有不同的设备ID。
所以我需要一些可以在这个测试环境中使用* .ini并将其与生产环境* .ini进行比较,并将测试* .ini中的设备ID替换为新ID。
基本上所有设备ID都在变化,ID中的第二个字符将是“6”。
D63001000A (within the TEST environment)
D33001000A (production environment)
所以看起来我需要它将ID中的第一个“3”更改为“6”(对于测试环境)。
答案 0 :(得分:0)
有很多方法可以解决这个问题,但我不建议在ID中替换单个字符。如果您想要使用VBScript路由,可以使用dictionary存储计算机名到ID的映射,并在替换中使用它。
Set deviceIDs = CreateObject("Scripting.Dictionary")
deviceIDs.Add "computer A", "ID A"
deviceIDs.Add "computer B", "ID B"
deviceIDs.Add "computer C", "ID C"
...
Set fso = CreateObject("Scripting.FileSystemObject")
ini = fso.OpenTextFile("C:\path\to\your.ini").ReadAll
Set re = New RegExp
re.Pattern = "(device id = ).*"
Set net = CreateObject("WScript.Network")
ini = re.Replace(ini, "$1" & deviceIDs(net.ComputerName))
fso.OpenTextFile("C:\path\to\your.ini").Write ini
如果您将计算机名称映射到某些其他文件(例如CSV)中的设备ID,您也可以使用该文件填充字典:
Set deviceIDs = CreateObject("Scripting.Dictionary")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\path\to\device_id.csv")
Do Until f.AtEndOfStream
id = Split(f.ReadLine, ",")
deviceIDs.Add id(0), id(1)
Loop
f.Close
编辑:要替换特定行中的特定字符,您可以执行以下操作:
lineNumber = 23
Set fso = CreateObject("Scripting.FileSystemObject")
ini = Split(fso.OpenTextFile("C:\path\to\your.ini").ReadAll, vbNewLine)
Set re = New RegExp
re.Pattern = "^(.{16})3"
ini(lineNumber) = re.Replace(ini(lineNumber), "$16")
fso.OpenTextFile("C:\path\to\your.ini").Write Join(ini, vbNewLine)