我有这个代码可以正常工作:
Get-Content $path\$newName -Encoding OEM |ForEach-Object {$_ -replace '<Num:(\d{8,20})>$','$1'}| Set-Content $path\$txtName -Encoding UTF8
字符串由数字替换。但我希望能够在循环外使用$ 1。
像:
write-host $1
例如。但如果我这样做,注意输出。 有什么建议吗?
感谢。
答案 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]
..等等。