如果我运行以下代码,我会根据文件是否存在并具有完整输出来获得预期结果(即 $filepath 始终等于“C:\test\test.txt”):
$filepath = "C:\test\test.txt"
If( Test-Path $filepath)
{
Write-Host "File does exist: " $filepath
}
Else
{
Write-Host "File does not exist: " $filepath
}
即。 $filepath 在 if block 的范围内
为什么从外部文件读取文件路径时这种行为似乎没有转换?此处,条件始终返回 false,并且输出显示为好像 $fileLocation 为空。
testConfig.xml 文件:
<ConfigFile>
<FileLocation>C:\test\test.txt</FileLocation>
</ConfigFile>
powershell代码:
[xml]$config = Get-Content ".\testConfig.xml"
$fileLocation = $config.SelectNodes("//FileLocation")
If( Test-Path -LiteralPath $fileLocation)
{
Write-Host "File does exist: " $fileLocation
}
Else
{
Write-Host "File does not exist: " $fileLocation
}
这与变量作用域有关吗?从 xml 文件读取文件路径时,如何获得与第一个代码块相同的行为?
最佳答案
SelectNodes
返回一个XmlNodeList
,而不是字符串
。如果只想选择一个节点,则应使用 SelectSingleNode反而。此外,如果您传递 SelectSingleNode
返回的 XmlNode
,它会将 FileLocation 传递给 Test-Path
cmdlet,因为XmlNode
的 ToString() 方法被调用并实际返回节点的名称。您可以使用 InnerText
属性来执行此操作:
$node = config.SelectSingleNode("//FileLocation")
Test-Path $node.InnerText
关于xml - xml 文件中的 Powershell 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637769/