意外的令牌" in"在ForEach-Object中

时间:2015-07-08 19:13:52

标签: powershell-v2.0

正在寻找此ForEach-Object的正确格式。我正在阅读有关PowerShell介绍的书。本书的一个例子如下,但这个例子不起作用。

$TEXTfile = $other = 0
ForEach-Object ($file in (Get-Childitem C:\PSLearn) {
  switch ($file.extension) {
    ".txt"  {$TEXTfile++}
    default {$other++}
  }
}
#Display results
"$TEXTfile text files"
"$other other files"

返回的错误是:

  

意外的令牌' in'在表达或陈述中。

(<name> in <collection>)部分的正确格式是什么?

(之前的开场$file对我来说似乎不对,因为我没有看到匹配的关闭paren ),但这正是书中的例子。

2 个答案:

答案 0 :(得分:1)

foreachForEach-Objectdifferent loop constructs。后者用于处理管道输入,前者用于迭代列表,不能读取或写入管道(尽管有变通方法)。

foreach循环如下所示:

foreach ($item in $list) {
  # do stuff with $item
}

ForEach-Object循环通常如下所示:

... | ForEach-Object {
  # do stuff with current object variable $_
} | ...

你可以在某种程度上模仿带有foreach循环的ForEach-Object循环:

ForEach-Object -InputObject $list {
  # do stuff with $_
}

然而,循环变量仍然是&#34;当前对象&#34; automatic variable$_)。

答案 1 :(得分:0)

这对我有用:

$TEXTfile = $other = 0
ForEach ($file in Get-ChildItem  C:\temp){
     switch ($file.extension) {
    ".txt"  {$TEXTfile++}
    default {$other++} } }
 #Display results
 "$TEXTfile text files"
 "$other other files"