質問: ### 実現したいこと 以下のようなbatの出力結果をPowershellだけで得たい ``` rem "動画タイトルリスト.txt" "動画IDリスト.txt" は同じ行数ある要素 rem PowerShellではどちらも変数として扱う rem 例えば動画タイトルと動画IDを横に並べて一つのファイルにしたい rem 以下はCSV形式にする例 echo off chcp 65001 setlocal enabledelayedexpansion set n=0 set m=0 for /f "delims=" %%A in (動画タイトルリスト.txt) do ( for /f "delims=" %%a in (動画IDリスト.txt) do ( if !n! equ !m! ( echo "%%A","%%a">>動画タイトルと動画IDリスト.csv ) set /a m+=1 ) set /a n+=1 set m=0 ) endlocal exit /b ``` ### 質問した理由 バッチでは上のようにして2つの配列(一次元のリスト2つ)を一つのファイル(二次元のリスト)にまとめられるのだが、 PowerShellでテキストファイルを作らずに2つの変数を簡単に並列に加工する方法はないか? foreachやforで同等の仕組みは作れるがオブジェクトを扱うPowerShellの利点を活かせていない 検索した中では PowerShellの多次元配列 や テーブル ビューを作成する などは敷居が高い ### 補足情報(ツールのバージョンなど) cmd (Microsoft Windows [Version 10.0.18363.900]) powershell (7.0.2)
回答: > > PowerShellでテキストファイルを作らずに2つの変数を簡単に並列に加工する方法はないか? > > > 以下のような方法ではどうでしょうか? ``` $list1 = @("a", "b", "c") $list2 = @("1", "2", "3") 0..($list1.count-1) | %{ [PSCustomObject]@{ list1_item=$list1[$_]; list2_item=$list2[$_] } } ``` 必要であれば、最後の結果をさらにパイプラインで Export-Csv に渡してCSVとして出力することも可能です。