業務備忘録

備忘録です

PowerShellで文字列を機械的に埋め込んで出力する

2024-04-23 21:47:28 | 日記

インストールの許可がないためにPHPなど他言語でサクッとスクリプトを書くこともできないがエクセルで設計書を書くことを強いられるような過酷な状況の時のためのメモ書き

# 文字列を埋め込みたい場所に{0}を指定(複数埋め込みたい場合は都度数字をインクリメント)
$templates = @("テンプレ1({0})", "テンプレ2({0})" )
# 埋め込むための大量の文字列が1行ずつ書き込まれているファイルがあると想定
$attributes = (Get-Content -Encoding utf8 -Path C:\test.txt) -as [string[]]
#StringBuilderで効率よく結合
$formatedSb = [System.Text.StringBuilder]::new()

foreach ($att in $attributes) {
    foreach ($temp in $templates) {
        $formatedSb.AppendLine([string]::format($temp -f $att))
    }
}

#多分いらない $formatedSb.ToString() | Set-Content -Encoding utf8 -Path C:\result.txt で大丈夫
$encoder = [System.Text.Encoding]::UTF8.GetBytes($formatedSb.ToString())
#パイプで流し込む
[System.Text.Encoding]::UTF8.GetString($encoder) | Set-Content -Encoding utf8 -Path C:\result.txt

C:\result.txtに一行ずつフォーマットされた文字列が出力される。
VSCodeのPowerShell拡張から実行したらテンプレ部分が文字化けしてしまったけど、PowerShellのターミナルから実行したら文字化けしなかったので多分大丈夫。