这是我正在尝试编写的脚本的简化版本:
$i = 0
Get-ChildItem -Filter *.bat|
ForEach-Object {
Write-Host $_.Name
switch ($i) {
0 { Write-Host $_.Name}
1 { Write-Host $_.Name }
2 { Write-Host $_.Name }
Default {Write-Host "nothing here"}
}
}
第一条Write-Host
命令按预期工作,但一旦进入switch语句,Write-Host
就不打印任何东西,这让我感到困惑。我认为问题与$_
的作用域有关,但我不知道。我是一个完全的Powershell菜鸟。难道switch语句不是在foreach循环内部吗?所以作用域不应该是个问题吗?
如果我这样做,那么一切都像我预期的那样工作,文件名从switch语句内部和外部都被打印出来:
$i = 0
Get-ChildItem -Filter *.bat |
ForEach-Object {
Write-Host $_.Name
$temp = $_.Name
switch ($i) {
0 { Write-Host $temp }
1 { Write-Host $temp }
2 { Write-Host $temp }
Default {Write-Host "nothing here"}
}
}
有人能解释一下这里发生了什么吗?