0

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

ComputerName=%DeviceName%

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

这是我当前代码的片段:

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

感谢任何人都可以提供的任何指导。

4

3 回答 3

2

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

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

或者

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

这只会替换 az 或 AZ 的设备名称。不是数字或包含空格。

于 2013-03-19T20:43:35.130 回答
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 ->. 这个正则表达式也有点宽松,因为它将匹配在行首以及等号之前和/或之后包含空格的行。下图更详细地解释了这个正则表达式的组成部分。

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

在此处输入图像描述

于 2013-03-19T21:32:05.187 回答
1

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

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

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

[write_section_here]
ComputerName=localhost
于 2013-03-21T16:04:06.417 回答