注册表文件中,hex(2) 是可扩充字符串类型(REG_EXPAND_SZ),一般用于字符串里面包含有系统环境变量的场合,比如包含 %WinDir% 等系统环境变量。
如果确定字符串不包含这些变量,可以这样:- $srcFile = 'a.reg'; #源文件
- $dstFile = 'b.reg'; #目标文件
-
- $scriptBlock1 = {
- param($a);
- $s = $a.Value -replace '[\s\\]' -replace '00,00$';
- $s = $s.Split(':', 2)[1];
- $s = [regex]::Replace($s, '([0-9a-f]{2}),([0-9a-f]{2}),', $scriptBlock2);
- return '="' + $s.Replace('\', '\\') + '"';
- }
-
- $scriptBlock2 = {
- param($b);
- return [char][int]('0x' + $b.Groups[2].Value + $b.Groups[1].Value);
- }
-
- $reg = '(?i)=hex\(2\):(?> *(?:[a-f0-9]{2},)+(?:\\\r\n)?)+00(?!,)';
- $str = (gc $srcFile -ReadCount 0) -join "`r`n";
- $str = [regex]::Replace($str, $reg, $scriptBlock1);
- sc $dstFile -Value $str -Enc Unicode;
-
- pause;
复制代码
|