【发布时间】:2017-02-21 14:42:33
【问题描述】:
我正在为以下情况苦苦挣扎:
testfile.txt
1个 2 乙 3 c
脚本:
$input = Get-Content "C:\Scripts\testfile.txt"
foreach ($line in $input) {
$var1 = $line.Substring(2,1)
$output = "$var1 is $var2"
if ($line -match "1") {
$var2 = "1"
Write-Host $output
} elseif ($line -match "2") {
$var2 = "2"
Write-Host $output
} elseif ($line -match "3") {
$var2 = "3"
Write-Host $output
} else {}
}
结果:
a 是 3 b 是 1 c 是 2
为什么结果混淆了?应该是:
a 是 1 b 是 2 c 是 3
即使我将$output 放在foreach 循环的末尾?!
【问题讨论】:
-
将
$output = "$var1 is $var2"移动到Write-Host之前,因为它不是模板,而是使用先前值的立即扩展替换。 -
当然可以。但是真的有必要把它放在每个 if 语句中吗?
-
或者您可以将每个 Write-Host 更改为
Write-Host "$var1 is $var2" -
其实你的整个代码可以写成
(Get-Content "C:\Scripts\testfile.txt") -replace '(\S+)\s+(\S+)', '$1 is $2'如果你想要模板,使用script block method。 -
是的,这只是我原始脚本的一个简化示例。我会像你展示的那样解决它。谢谢大家!
标签: powershell variables foreach