You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:09:52