Powershell数组被解释为单个项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Powershell数组被解释为单个项目相关的知识,希望对你有一定的参考价值。
我正在学习PowerShell,并遇到问题。
我正在尝试使用数组定义文件夹/文件paths的集合,然后在foreach循环中使用该集合。执行循环时,似乎将集合连接到单个路径中,而不是分别处理数组中的每个项目。这导致找不到路径错误。
代码:
$SourcePathRoot = "C:\Temp\"
#$SourcePaths = @($SourcePathRoot + "File1.dat", $SourcePathRoot + "File2.txt")
foreach ($Path in $SourcePaths)
Write-Host $Path
Test-Path $Path
输出($ Path和Test-Path $ Path):
C:\ Temp \ File1.dat C:\ Temp \ File2.txt
False
我知道这可能很简单-我在做什么错?!?谢谢。
这与PowerShell中的运算符优先级有关。
在您的示例中,对数组表达式中间的,
运算符求值之前 +
运算符。
让我们逐步通过:
# Okay, this is the raw expression
@($SourcePathRoot + "File1.dat", $SourcePathRoot + "File2.txt")
# , takes precedence and is evaluated first, leaving us with
@("C:\Temp\" + @("File1.data", "C:\Temp\") + "File2.txt")
+
的行为取决于左侧操作数的类型-这是一个字符串-因此PowerShell会尝试将中间数组的字符串连接到第一个字符串,结果是:
@("C:\Temp\File1.data C:\Temp\" + "File2.txt")
这就是为什么结果是一个由1个字符串组成的数组,其值C:\Temp\File1.dat C:\Temp\File2.txt
解决方案很简单,只需将数组表达式分成两个单独的语句:
$SourcePaths = @($SourcePathRoot + "File1.dat"; $SourcePathRoot + "File2.txt")
# or
$SourcePaths = @(
$SourcePathRoot + "File1.dat"
$SourcePathRoot + "File2.txt"
)
以上是关于Powershell数组被解释为单个项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在powershell中将嵌套的任意关联数组值设置为.psd1文件?
将大型数据框导出到 Power BI 可以使用的单个文件的最佳方式
win10下,cmd,power shell设置默认编码为‘UTF-8
在 power shell 中安装 Az 模块时出现“PackageManagement\Install-Package:访问云文件被拒绝”错误