- ベストアンサー
Powershellで複数のcsvファイルを一つに
powershellの初心者です。 PowerShellで複数のcsvファイルを一つにする必要にせまり ネット情報を探して以下がヒットしましたが 初心者なのこの情報をどう利用して良いのかが判りません。 以下の具体例でコード(Join.ps1)を教えてください。 以下の3つのファイルを C:\Users\TAC_\Desktop\Test\Drive1.csv C:\Users\TAC_\Desktop\Test\Drive2.csv C:\Users\TAC_\Desktop\Test\Drive3.csv 以下のファイル名に保存(まとめる) C:\Users\TAC_\Desktop\Test\Join.csv C:\Users\TAC_\Desktop\Test\Join.ps1を起動させると 該当する3つのCSVファイルを結合したJoin.csvを作成する
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私なら、そのファイル群なら、 gc Drive[1-3].csv | sc join.csv と書きます。 (gc --- Get-Content、sc --- Set-Content) バッチファイルとして実行するなら、 powershell -c "gc Drive[1-3].csv | sc join.csv" で、いいです。 私は、PS1ファイルは使いません。面倒くさい。 今回は、短いですが、長いコードをバッチファイルとして実行したいなら、 https://eta-carinae-nebula.blog.jp/archives/17149107.html
その他の回答 (2)
- redslove10
- ベストアンサー率41% (398/969)
> C:\Users\TAC_\Desktop\Test\ > Get-Content Drive1.csv Drive2.csv Drive3 .csv | Join.csv 紹介されているページにあるように、文字化けを防ぐために Set-Content を挟むには C:\Users\TAC_\Desktop\Test\ > Get-Content Drive1.csv Drive2.csv Drive3 .csv | Set-Content Join.csv のようにします。 > 登録すべきコードを教えてください。 上記コマンドラインをそのまま join.ps1 とすればよいです。 なお、スクリプトを実行するには、実行ポリシーの変更が必要になるかもしれません。 https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies
お礼
実行ポリシー ? Powershellは、batのように簡単に呼び出せないのは何となく判りましたが。 じゃー、具体的にどのようなコードを追加するかですよね。 「実行ポリシー」とやらが不可欠だそうですがさっぱり??です。 下記を、join.ps1(C:\Users\TAC_\Desktop\Mp3_MergeDrive\Join.ps1)で保存 C:\Users\TAC_\Desktop\Test\ > Get-Content Drive1.csv Drive2.csv Drive3 .csv | Set-Content Join.csv powershellを起動して以下を実行してもエラーが出てしまいます。 PowerShell -ExecutionPolicy RemoteSigned C:\Users\TAC_\Desktop\Mp3_MergeDrive\Join.ps1 個人的には、ファイラーでjoin.ps1を右クリックして「Powershellで実行」でJoin.csvを作成したい。 具体的なjoin.ps1に書き込むべきコマンドを教えてください。
補足
Powershellは、私には荷が重いのでbatで処理することにしました。
- redslove10
- ベストアンサー率41% (398/969)
「ファイルを一つにする」が単なる結合であれば、複数のcsvファイルがあるディレクトリで (該当のディレクトリ)> Get-Content 複数のファイル名を列挙 > 結合ファイル名 で出来ます。
お礼
アドバイスありがとうございます。 >ネット情報を探して以下がヒットしましたが すいません。 参考のURLを書き出すのを忘れていました。 https://tex2e.github.io/blog/powershell/concat-files ’-------------------------------------------------- >(該当のディレクトリ)> Get-Content 複数のファイル名を列挙 > 結合ファイル名 回答にあるようになコマンドは、参考のURLで紹介されていますが このコマンドの書き方も良くわからない初心者です。 すでに提示した具体例で言うと以下のよいなコードでしょうか ? C:\Users\TAC_\Desktop\Test\ > Get-Content Drive1.csv Drive2.csv Drive3 .csv | Join.csv CSVがSJISなので「>」ではなく「|」に変更していますが? 合っていますか? 毎回、powershellを立ち上げてこのコマンドを毎回打ち込むのは面倒なので join.ps1を作成してbatファイルのようにjoin.ps1をpowershellで実行して処理したのですが 登録すべきコードを教えてください。
お礼
UY-Scutiさん、ありがとうございます。 Join.ps1を以下の内容で作成して「powershellで実行」で上手く処理できました。 powershell -c "gc *.csv | sc join.csv" join_pws.batを以下の内容で作成してダブルクリックで実行して上手く処理できました powershell -c "'#'+(gc '%~f0' -Raw) | iex" &exit/b powershell -c "gc *.csv | sc join.csv" ps1(powershell)は、batに比べたら手続きが面倒ですね。