PowerShell 中 Set-Variable 的不正确行为

PowerShell 中 Set-Variable 的不正确行为

我想将计数值(文件夹中的 XML 文件的数量)设置为一个变量。

Set-variable (Get-ChildItem $filepath|where{$_.Extension -eq ".xls"}|Measure-Object).Count -Value $NumberOfCabinets

在此之后,我的变量NumberOfCabinets每次都会给我一个 0 的值。

应如何更改命令才能将正确的值存储在变量中?

答案1

正如 SimonS 在评论中提到的,您需要切换哪个表达式是-Name,哪个是-Value。目前,您获取 XLS 文件数量的表达式隐式地是参数-Name-Set-Variable即要设置的变量的名称 - 而 的内容是$NumberOfCabinets该变量的数据。由于$NumberOfCabinets尚未设置,因此新变量被分配为 null。例如,如果有五个 XLS 文件,$5则会创建一个名为的变量并将其设置为 null,因为您的 count 表达式提供了变量名称。

通常,Set-Variable只有当您需要动态选择要设置的变量时才需要。如果您仍然想使用它,您的命令将如下所示:

Set-Variable 'NumberOfCabinets' (Get-ChildItem $filepath | where {$_.Extension -eq ".xls"} | Measure-Object).Count

请注意,要设置/创建的变量的名称只是作为字符串传递。

但是,使用标准赋值运算符设置变量可能更简单:

$NumberOfCabinets = (Get-ChildItem $filepath | where {$_.Extension -eq ".xls"} | Measure-Object).Count

使用一些别名以及 PowerShell 集合已具有属性的事实Count,我们甚至可以稍微浓缩它:

$NumberOfCabinets = (gci $filepath | ? { $_.Extension -eq '.xls' }).Count

相关内容