Powershell:裁剪作为输入参数的路径



我有一个powershell脚本,我想通过cammand行执行它。为此,我需要输入xml文件的路径。最好把问题表现出来。错误:找不到文件

我的所有文件都在同一个目录C:\Users\fynne\test中(原因是我为之编写此脚本的用户(,但不知何故,在加载xml时跳过了测试目录(找不到C:\Users\fynne\01-38-029.xml(。我不知道为什么会发生这种事
这就是我加载xml的方式。

$PatientA = $args[0]
$PatientB = $args[1]
$XmlA = New-Object System.XML.XMLDocument
$XmlA.Load($PatientA)
$XmlB = New-Object System.XML.XMLDocument
$XmlB.Load($PatientB)

有人知道原因并有解决办法吗?我知道我可以通过使用一些字符串操作和$pwd来修复它,但我宁愿不这样做。

Thx

PowerShell将尝试解析相对于当前提供程序位置的非绝对路径,但.NET方法(如XmlDocument.Load()(将改为相对于当前进程的工作目录解析这些路径。

您可以使用Convert-Path:手动将相对路径转换为绝对路径

$PatientA,$PatientB = $args[0..1] |Convert-Path
$XmlA = New-Object System.XML.XMLDocument
$XmlA.Load($PatientA)
$XmlB = New-Object System.XML.XMLDocument
$XmlB.Load($PatientB)

如果您想尝试进一步验证路径,您也可以使用Resolve-Path,其中包括提供程序元数据:

$PatientA = $args[0] |Resolve-Path
if($PatientA.Provider.Name -ne 'FileSystem'){
throw 'First path was not a file system path...'
return
}

最新更新