質問: $file.WriteLine()) -ne $null) { $file.WriteLine($line) > $filename2 Write-Host("・" + $line + "、") > $filename2 } Write-Host("") $file.Close() Write-Host("以上です") **<テキスト例>** 【加工前】 レシピ じゃがいも にんじん カレールー 豚肉 ごはん 【加工後】 今日のレシピはこちらです! ・じゃがいも、 ・にんじん、 ・カレールー、 ・豚肉、 ・ごはん 以上です
回答: こんにちは。 ご提示のコードの何がダメかは imihito さんの回答の通りですので、私からはざっくり動作するコードを提示します。 ``` # Windows 10, PowerShell 5.1な環境で動作確認ずみ $HeaderTemplate = "今日の{0}はこちらです!" $DetailTemplate = "・{0}、" $FooterTemplate = "以上です。" Get-Content .\recipe_base.txt -Encoding Default | ForEach-Object -Process { if ( $_.ReadCount -eq 1 ) { # 1行目はヘッダ扱い Write-Output ($HeaderTemplate -f $_) } else { # 2行目以降 Write-Output ($DetailTemplate -f $_) } } -End { # 最終行を処理した後 Write-Output "$FooterTemplate" } | Out-File .\recipe_result.txt -Encoding Default -Append:$false ``` * `recipe_base.txt`が ``` レシピ じゃがいも にんじん カレールー 豚肉 ごはん ``` の部分になり、処理の結果は`recipe_result.txt`に出力されます。 * 実行結果 ``` 今日のレシピはこちらです! ・じゃがいも、 ・にんじん、 ・カレールー、 ・豚肉、 ・ごはん、 以上です。 ``` > > ・ごはん、 > > > と最後の行の後ろに`、`が残っていますが、まあ、そのあたりは頑張って直してみてください。 簡単に解説 `ForEach-Object`コマンドで`-Process`、`-End`パラメーターを指定していますが、これはそれぞれ * -Process : `Get-Content`で得た各行ごとに実行される * -End : `Get-Content`で得たすべての行の処理が終わった後に実行される ものとなります。 `$_`には`recipe_base.txt`の各行の文字列が設定されます。 `Get-Content`を使った時だけ使用可能な特別なプロパティ`ReadCount`で現在の行数を取得することができ、1行目とそれ以外を判定しています。 また、文字列の変形には書式指定演算子(`-f`)を使用しています。 こちらはC#などの`String.Format`メソッドと同等の機能となります。 文字コードについて、日本語Windows環境であれば`-Encoding Default`はSHIFT_JISになります。