#date: 20250411 #ref: https://blog.darkthread.net/blog/code-list-from-git-diff/ param ( [Parameter(Mandatory=$True)] [string] $diffFile, [Parameter(Mandatory=$True)] [string] $srcFolder, [Parameter(Mandatory=$True)] [string] $targetFolder, [Parameter(Mandatory=$True)] [string] $resultFolder ) #讀取 git diff --name-status 結果 $files = Get-Content $diffFile -Encoding UTF8 #清單陣列 $list = @() foreach ($file in $files) { #使用 .NET Regex 解析取出狀態及路徑 $match = [System.Text.RegularExpressions.Regex]::Match($file, "^(?[ACDMRTUXB])\s+(?

.+)$") if (-not $match.Success) { continue } $relFilePath = $match.Groups["p"].Value.Replace("/", "\") $status = $match.Groups["s"].Value.Replace("A", "新增").Replace("M", "修改").Replace("D", "刪除") #產生程式碼清單 $object = New-Object PSObject -Property @{ Path = $relFilePath Desc = "" Status = $status Remark = "" } $list += $object #複製檔案 if ($status -ne "刪除") { #小技巧:New-Item 可一次產生所需的目錄階層,取代逐層檢查目錄是否存在及建立 New-Item -ItemType File -Path "$targetFolder\$relFilePath" -Force | Out-Null Copy-Item "$srcFolder\$relFilePath" "$targetFolder\$relFilePath" -Force | Out-Null } } #產生CSV $list | Select @{N='路徑';E={$_.Path}},@{N='說明';E={$_.Desc}},@{N='狀態';E={$_.Status}},@{N='備註';E={$_.Remark}} | Export-Csv "$resultFolder\CodeList.csv" -Encoding UTF8 -NoTypeInformation