$space =("`r`n")
$data = @(Get-Content C:\Users\user1\Desktop\ma.txt)
$Array = ($Data.Split($space)).Split($space)
$pos1 = $Array[0][0] $Array[0][1]
$pos2 = $Array[1][0] $Array[1][1]
$pos3 = $Array[2][0] $Array[2][1]
#$pos1
#$pos2
#$pos3
$zahl1 = $Array[0][5] $Array[0][7] $Array[0][9]
$zahl1
PowerShell 7.2
txt1.txt 有文字:
x1 = 2 3
x2 = 8 / 4
x3 = 1 - 4
我希望使用終端中的命令將結果(來自 x1、x2、x3)保存在 txt2.txt 中。我試過用陣列,但我只得到 :2 3 而不是 5
有什么想法嗎?
uj5u.com熱心網友回復:
您可以為此使用 Invoke-Expression,但請先閱讀警告
Get-Content -Path text1.txt | Where-Object {$_ -match '\S'} | ForEach-Object {
$var,$calculation = ($_ -split '=').Trim()
'{0} --> {1}' -f $var, (Invoke-Expression -Command $calculation)
} | Set-Content -Path text2.txt
uj5u.com熱心網友回復:
這是對更安全版本的嘗試,僅匹配數學運算式,因此用戶無法通過Invoke-Expression以下方式運行任意代碼:
Get-Content text1.txt |
Select-String '^\s*(\S )\s*=([\d\. \-*/%\(\)\s] )$' |
ForEach-Object {
$var = $_.Matches.Groups[ 1 ].Value
$expression = $_.Matches.Groups[ 2 ].Value
$result = Invoke-Expression $expression
"{0} = {1}" -f $var, $result
} |
Set-Content text2.txt
該Select-Stringcmdlet 使用正則運算式僅匹配被視為“安全”的行。在 RegEx 中,定義了兩個組將行拆分為變數 (1) 和計算 (2) 子字串。然后通過$_.Matches.Groups.
正則運算式細分:
| 圖案 | 描述 |
|---|---|
^ |
行開始 |
\s* |
零個或多個空白字符 |
( |
開始第一個捕獲組 |
\S |
一個或多個非空白字符 |
) |
結束第一個捕獲組 |
\s* |
零個或多個空白字符 |
= |
文字“=” |
( |
開始第二個捕獲組 |
[ |
允許字符的起始串列 |
\d\. \-*/%\(\)\s |
數字、點、數學運算、括號、空格 |
] |
結束允許的字串列 |
|
一個或多個字符(來自允許的字串列) |
) |
結束第二個捕獲組 |
$ |
行尾 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/366734.html
