powershell中相对路径解析不一致

powershell中相对路径解析不一致

以下脚本用于将 xml 文件转换为正确的格式。共有 4 个阶段:

  1. 删除所有 xml 标头
  2. 将所有内容包裹在testsuites元素中
  3. 添加 xml 标头
  4. 从元素中删除timestamp元素testsuite

param (
[string] $inputPath = $(throw "-inputPath is required."),
[string] $outputPath = $(throw "-outputPath is required.")
)

$content = Get-Content $inputPath

$replaced = $content -replace '\<\?xml version="1\.0" encoding="UTF-8" \?>', ""

Write-Output $replaced

$xmlHeader = '<?xml version="1.0" encoding="UTF-8" ?>'

$xmlcontent = $xmlHeader + '<testsuites>' + $replaced + '</testsuites>'

$xml = New-Object -TypeName System.Xml.XmlDocument
$xml.LoadXml($xmlcontent)

$xml.testsuites.testsuite[0].RemoveAttribute('timestamp')
$xml.testsuites.testsuite[1].RemoveAttribute('timestamp')

$xml.Save($outputPath)

我的问题是这样的。相对输入路径始终有效。相对输出路径始终将文件放入c:\windows\system32。我意识到这与 Powershell 的默认工作目录有关,但我很难向同事解释输入路径的行为。

我这样调用该命令:

xmlscript.ps1 -inputPath 'file.xml' -outputPath 'final.xml

答案1

我预计问题的根本原因是 PS 在使用内置命令(如Get-Content和对象)时处理当前文件夹概念的方式System.Xml

经过一番搜索,我找到了这个答案:

PowerShell 中的 Set-Location(又名 cd)不会更改操作系统维护的当前目录,因此当前目录通常保留启动 PowerShell 时的位置。如果要更改当前目录,可以设置 [Environment]::CurrentDirectory 属性

https://stackoverflow.com/questions/4822575/saving-an-xml-file-in-powershell-requires-complete-path-why

检查一下,它似乎适合你的情况。

答案2

如果所有三个文件都位于同一路径,则可以通过以下方式调用脚本

.\xmlscript.ps1 -inputPath '.\file.xml' -outputPath '.\final.xml

或者,如果您想将文件保存在与脚本最后一行final.xml相同的路径中,请将其更改为:file.xml

$savePath = Join-Path (Split-Path -Parent $inpuPath) (Split-Path -Leaf $outputPath)
$xml.Save($savePath)

相关内容