正在寻找此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 )
,但这正是书中的例子。
答案 0 :(得分:1)
foreach
和ForEach-Object
是different 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"