在Foreach-Object外部使用var

时间:2018-05-29 08:05:31

标签: powershell variables for-loop

我有这个代码可以正常工作:

Get-Content $path\$newName -Encoding OEM |ForEach-Object {$_ -replace '<Num:(\d{8,20})>$','$1'}| Set-Content $path\$txtName -Encoding UTF8

字符串由数字替换。但我希望能够在循环外使用$ 1。

像:

write-host $1

例如。但如果我这样做,注意输出。 有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:1)

基于VivekKumarSingh脚本。

$InFile = '.\test.txt'
$OutFile= '.\test2.txt'
$RegEx = "<Num:(\d{8,20})>$"
$array = @()
Get-Content $InFile -Encoding OEM | ForEach-Object {
    if ($_ -match $RegEx ){$array += $matches[1]}
        $_ -replace $RegEx,"`$1"
} | Set-Content $OutFile -Encoding UTF8
$array
> gc .\test.txt
<Num:1234567890>
<Num:23456789101112>

> .\SO_50579315.ps1
1234567890
23456789101112

> gc .\test2.txt
1234567890
23456789101112

答案 1 :(得分:0)

一种方法是将$1分配给这样的数组 -

$array = @()
Get-Content $path\$newName -Encoding OEM | ForEach-Object {$_ -replace '<Num:(\d{8,20})>$','$1'; $array += $1 } | Set-Content $path\$txtName -Encoding UTF8

您可以使用$1的值,例如$array[0]$array[1]$array[2] ..等等。