簡體   English   中英

在 Powershell 本地工作的 -split ' ' 在 Azure 管道 Powershell 任務中不起作用

[英]-split ' ' that works locally in Powershell does not work in a Azure pipeline Powershell task

我正在使用 git diff 命令來獲取在最后 2 次提交之間更改的文件,並且根據操作必須對文件執行不同的操作。 所以我必須提取對文件和文件名的操作。

對於重命名的文件:

git diff 命令的結果如下,這是一個從swaggerA.jsonswaggerB.json的重命名的 swagger 文件

R100 swaggerA.json swaggerB.json

這是我的代碼:

$files=$(git diff HEAD~ HEAD --name-status) 
$temp=$files -split ' '
echo $temp 
echo $temp.Length
$name=$temp[1]
echo "this is $name file"
write-host $name 
$output=$name.Split(' ')
$length=$output.Length
$output[0] 
$output[1] 
$output[$length-1]

理想情況下,上面的腳本應該已經拆分並提供了 3 個部分:

1) R100

2)招搖Ajson

3) swaggerB.json

但是它在 Azure 管道的 Powershell 任務中並沒有這樣做,並且每次都給出整個字符串。

git diff [cid]..[cid] --name-status輸出制表符分隔值的行,因此在正常空間上拆分對您沒有幫助:

$changes = git diff HEAD~ HEAD --name-status |ForEach-Object {
    # split on tab "`t"
    $change,$orig,$new = $_ -split "`t"
    [pscustomobject]@{
        Change = $change
        Original = $orig
        Current = $new
    }
}

因為gid diff返回一個帶有隱藏 ASCII 符號 ( `t ) 的字符串,如果我們將結果復制到 Notepad++(並在設置中按下“顯示所有字符”),我們可以看到它:

在此處輸入圖片說明

所以我們需要在拆分之前用常規空間替換它:

$files = $files -replace '[^\p{L}\p{Nd}/(/./_]', ' '

現在它將起作用,您將分割字符串:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM