我刚刚在Powershell中遇到有关数组的问题,我只是想了解发生了什么。
为什么会这样:
$Path = 'C:\'
$File1 = $Path + 'File1.txt'
$File2 = $Path + 'File2.txt'
$Files= @($File1, $File2)
与此不同:
$Path = 'C:\'
$Files= @($Path + 'File1.txt', $Path + 'File2.txt')
因为第一个,我可以像这样解析它:
$Files| ForEach-Object {
$Test = Get-Item -Path $_
}
但是我不能用第二个,除非我这样创建它:
$Path = 'C:\'
$Files = @(($Path + 'File1.txt'), ($Path + 'File2.txt'))
是否有另一种干净的方法来创建数组? 谢谢!
答案 0 :(得分:3)
在第一个实例中,您将创建一个包含2个元素的数组。在第二个实例中,您将创建一个包含单个元素的数组。 PowerShell不会将$Path + 'File1.txt'
作为一个处理。
您可以使用$Files.Count
检查数组中的元素数量:第一种方法会显示2
,第二种方法会显示1
。
您可以使用已识别的方括号()
或使用{}
包装变量来解决此问题:
$Files= @("${Path}File1.txt", "${Path}File2.txt")
如果您计划在ForEach-Object
中使用此计划,则可以在该循环中使用$Path
:
$Path = 'C:\'
$Files= @('File1.txt', 'File2.txt')
$Files| ForEach-Object {
$Test = Get-Item -Path "${Path}$_"
}
<强>附录强>
根据培根比特的有用评论,这归因于Operator Precedence,,
的优先级高于+
@($Path + 'File1.txt', $Path + 'File2.txt')
变为:
($Path) + ('File1.txt', $Path) + ('File2.txt')
而不是:
($Path + 'File1.txt'), ($Path + 'File2.txt')