PowerShell中[xml]对象Save方法相对路径失效问题求助
问题原因
.NET类库的XmlDocument.Save()方法不识别PowerShell的~路径简写,它会把~当成路径的字面部分,所以才会出现找不到C:\Users\craig\~\.m2\settings.xml的错误——因为这个路径里的~不是被解析成用户目录,而是一个真实的文件夹名称,显然不存在。
解决办法
方法1:先解析出绝对路径再调用Save
用PowerShell的命令先把~转换成绝对路径,再传给Save()方法:
# 先解析路径为绝对路径 $settingsPath = Resolve-Path ~/.m2/settings.xml # 读取XML $xml = [xml](Get-Content $settingsPath) # 这里可以修改XML内容... # 保存时用解析后的绝对路径 $xml.Save($settingsPath.Path)
或者直接用$HOME变量(PowerShell里$HOME就是当前用户主目录的绝对路径):
$settingsPath = Join-Path $HOME ".m2/settings.xml" $xml = [xml](Get-Content $settingsPath) # 修改XML... $xml.Save($settingsPath)
方法2:用PowerShell的Set-Content代替Save方法
既然Set-Content是PowerShell的原生cmdlet,能识别~路径,那就可以把XML的内容转成字符串后用它来保存:
$xml = [xml](Get-Content ~/.m2/settings.xml) # 修改XML内容... # 把XML对象转成字符串,用Set-Content保存,指定编码避免乱码 $xml.OuterXml | Set-Content ~/.m2/settings.xml -Encoding utf8
注意指定编码,避免默认编码和原文件不一致导致的问题。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

