【问题标题】:Batch file or VBS to edit one charcter批处理文件或 VBS 编辑一个字符
【发布时间】:2015-05-05 20:33:52
【问题描述】:

我需要使用“某物”,可能是 *.bat 或 *.vbs 或两者的组合。 场景:我有一个大约有 200 个用户的环境。他们有一个用于特定应用程序的生产环境和一个用于该应用程序的测试环境。

有一个文件(一个 *.ini)文件将“设备 ID”从生产环境拉到了测试环境中。

测试环境中的 *.ini 文件需要更改一个字符才能在测试环境中正常工作。但是两百台电脑中的每一台都有不同的设备 ID。

所以我需要一些可以用于此测试环境 *.ini 并将其与生产环境 *.ini 进行比较,并将测试 *.ini 中的设备 ID 替换为新 ID。

基本上所有在设备 ID 中发生的变化,就是 ID 中的第二个字符将是“6”。

D63001000A (within the TEST environment)

D33001000A (production environment)

看来我需要将 ID 中的第一个“3”更改为“6”(用于测试环境)。

【问题讨论】:

    标签: batch-file vbscript helpers


    【解决方案1】:

    有很多方法可以解决这个问题,但我不建议您摆弄替换 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)
    

    【讨论】:

    • 哇,太棒了,但我不知道该怎么做。部分问题是,我们不知道哪台计算机有哪个 ID。这是一团糟..
    • 很抱歉我对这个话题一无所知,但是如果有一个可以运行的脚本呢?这将打开文件,倒计时到特定行,然后计数超过 17 个字符,然后将“3”更改为“6”,保存并关闭?
    • 假设它位于:C:\SomeProgram\SubDirectory\test\THIS.ini
    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多