正则表达式修改Sysprep.inf文件

时间:2013-03-19 20:32:36

标签: regex autoit

我目前需要解析sysprep.inf文件并插入最终用户输入的值。 我正在使用AutoIT对此实用程序进行编码,而我的正则表达式略有不同。 我需要修改的一行如下:

ComputerName=%DeviceName%

DeviceName是LANDesk注入的变量。如果设备先前已在LANDesk数据库中,则将名称注入到文件中。如果不是,则保留变量名称。设备名称必须在=

之后

以下是我当前代码的片段:

$FileContents = StringRegExpReplace($FileContents,'ComputerName=[a-z]','ComputerName='& $deviceNameInput)

感谢任何人提供的任何指导。

3 个答案:

答案 0 :(得分:2)

我不熟悉AutoIT或BASIC ......但看起来你需要使用这样的东西:

$FileContents = StringRegExpReplace($FileContents,'.*ComputerName=(\%[a-zA-Z]*\%).*', $deviceNameInput)

OR

$FileContents = StringRegExpReplace($FileContents,'ComputerName=\%[a-zA-Z]*\%', 'ComputerName='&$deviceNameInput)

这只会替换a-z或A-Z的设备名称。不是数字或包含空格。

答案 1 :(得分:2)

编写正则表达式可能很难,因为有很多正则表达式的方言。假设您正在使用支持类似Perl的方言的正则表达式库,您可能希望尝试使用此正则表达式:

^\s*ComputerName\s*=\s*(?:%DeviceName%|[a-zA-Z0-9_-]+)

基本上,此正则表达式将匹配文字字符串ComputerName=%DeviceName%ComputerName=<some actual device name that only contains the characters a-z, A-Z, 0-9, _, and ->。这个正则表达式也有点宽松,因为它将匹配在行的开头以及等号之前和/或之后包含空格的行。下图更详细地解释了此正则表达式的组件。

P.S。该图像由RegexBuddy生成,这是一个出色的正则表达式IDE。

enter image description here

答案 2 :(得分:1)

Autoit有一个处理ini文件的好方法 - IniWrite

IniWrite("SysPrep.ini", "write_section_here", "ComputerName", $deviceNameInput)

使用以下命令创建或更新SysPrep.ini:

[write_section_here]
ComputerName=localhost