PowerShell解析properties文件报Unrecognized escape sequence错误如何处理
问题根因
ConvertFrom-StringData cmdlet的默认解析规则会将反斜杠(\)视为转义字符,properties文件内数据源配置里的\PWDFC1片段中,\P不属于PowerShell支持的合法转义序列,因此抛出解析错误。
修复方案(无需修改properties文件)
在读取properties内容后、传给ConvertFrom-StringData之前,先把所有单反斜杠替换为双反斜杠,即可绕开转义解析问题,修改后的脚本如下:
$EnvProps='C:\Apps\SAA\config\env.properties' $AppConfig= 'C:\Apps\SAA\config\app.config' # 先读取文件内容,将所有单反斜杠替换为双反斜杠再做解析 $rawContent = [IO.File]::ReadAllText($EnvProps) -replace '\\', '\\' $ReadProps = ConvertFrom-StringData $rawContent foreach($key in $ReadProps.Keys) { $value = $ReadProps[$key] (Get-Content $AppConfig -Raw) -replace "@@$key@@", [regex]::Escape($value) | Set-Content $AppConfig }
补充说明
- 第一层替换
-replace '\\', '\\':第一个参数是正则匹配规则,两个反斜杠表示匹配单个字面量反斜杠,第二个参数表示将匹配到的单个反斜杠替换为双反斜杠,传给ConvertFrom-StringData后会被正确解析为单个反斜杠存入对应value - 第二层
[regex]::Escape($value):-replace运算符属于正则替换逻辑,用该方法转义value内的所有正则特殊字符,可以避免替换环节出现意料之外的解析错误
内容的提问来源于stack exchange,提问作者pandeg87
相关产品推荐
相关产品推荐

