• ベストアンサー

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を作成する

質問者が選んだベストアンサー

  • ベストアンサー
  • UY-Scuti
  • ベストアンサー率82% (14/17)
回答No.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

NuboChan
質問者

お礼

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に比べたら手続きが面倒ですね。

その他の回答 (2)

回答No.2

> 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

NuboChan
質問者

お礼

実行ポリシー ? 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に書き込むべきコマンドを教えてください。

NuboChan
質問者

補足

Powershellは、私には荷が重いのでbatで処理することにしました。

回答No.1

「ファイルを一つにする」が単なる結合であれば、複数のcsvファイルがあるディレクトリで (該当のディレクトリ)> Get-Content 複数のファイル名を列挙 > 結合ファイル名 で出来ます。

NuboChan
質問者

お礼

アドバイスありがとうございます。 >ネット情報を探して以下がヒットしましたが すいません。 参考の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で実行して処理したのですが 登録すべきコードを教えてください。

関連するQ&A

  • PowerShellで処理を簡単にしたい

    PowerShellは、ど素人です。 PowershellであるPs1ファイルを実行するのに 現在下記の手順で行っています。 1)PowerShellを管理者権限で実行 2)以下のコマンドを最初に実行 powershell set-executionPolicy remoteSigned 3)次に以下のコマンドを実行 powershell -File C:\Users\Mic\Desktop\Keep\sample.ps1 毎回、2),3)をPowerShellの画面にコピペして処理しています。 もう少し簡単な手順になれば嬉しいのですが、 1),2),3)を一つのBATで処理するような方法はありませんか ? BATに限らず手順が減るような方法があれば教えてください。

  • PowerShellについて

    PowerShellについて 以下の構文ですが、これは、Cドライブ配下のフォルダを取得し、 アクセス権を取得しCSVに吐き出す処理のようですが、このCSVは どこにはきだされるのでしょうか? ? Cドライブで実行してみましたが、何もファイルが作られていないようです。 Get-ChildItem c:\ -Recurse | Get-ACL |Export-Csv c:ACL-List.csv

  • Export-Csvコマンド 

    PowerShellのExport-Csvコマンドについてです。 以下のコマンドで、Cドライブにある情報をCSV形式に出力しました。 PS C:\> Get-ChildItem |Export-Csv test01.csv -Encoding default そして、C:\script-testフォルダ内の情報をCSV形式で出力しようと Export-Csvコマンドを実行し、出来上がったCSVファイルを見てみると 何かがおかしい状態となっております。。CSV出力できていないのでしょうか? PS C:\script-test> Get-ChildItem | Export-Csv test01.csv -Encoding default ↓↓出来上がったCSVファイルの中身↓↓ #TYPE System.IO.FileInfo "PSPath","PSParentPath","PSChildName","PSDrive","PSProvider","PSIsContainer","VersionInfo","BaseName","Mode","Name","Length","DirectoryName","Directory","IsReadOnly","Exists","FullName","Extension","CreationTime","CreationTimeUtc","LastAccessTime","LastAccessTimeUtc","LastWriteTime","LastWriteTimeUtc","Attributes" "Microsoft.PowerShell.Core\FileSystem::C:\script-test\addres.txt","Microsoft.PowerShell.Core\FileSystem::C:\script-test","addres.txt","C","Microsoft.PowerShell.Core\FileSystem","False","File: C:\script-test\addres.txt InternalName: OriginalFilename: FileVersion: FileDescription: Product: ProductVersion: Debug: False Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language: ","addres","-a---","addres.txt","153","C:\script-test","C:\script-test","False","True","C:\script-test\addres.txt",".txt","2014/09/04 22:29:00","2014/09/04 13:29:00","2014/09/04 22:29:00","2014/09/04 13:29:00","2014/09/04 23:03:30","2014/09/04 14:03:30","Archive" "Microsoft.PowerShell.Core\FileSystem::C:\script-test\date.ps1","Microsoft.PowerShell.Core\FileSystem::C:\script-test","date.ps1","C","Microsoft.PowerShell.Core\FileSystem","False","File: C:\script-test\date.ps1 InternalName: OriginalFilename: FileVersion: FileDescription: Product: ProductVersion: Debug: False Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language: ","date","-a---","date.ps1","18","C:\script-test","C:\script-test","False","True","C:\script-test\date.ps1",".ps1","2014/09/02 19:22:53","2014/09/02 10:22:53","2014/09/02 19:22:53","2014/09/02 10:22:53","2014/09/02 19:22:53","2014/09/02 10:22:53","Archive" "Microsoft.PowerShell.Core\FileSystem::C:\script-test\sumtest.ps1","Microsoft.PowerShell.Core\FileSystem::C:\script-test","sumtest.ps1","C","Microsoft.PowerShell.Core\FileSystem","False","File: C:\script-test\sumtest.ps1 InternalName: OriginalFilename: FileVersion: FileDescription: Product: ProductVersion: Debug: False Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language: ","sumtest","-a---","sumtest.ps1","238","C:\script-test","C:\script-test","False","True","C:\script-test\sumtest.ps1",".ps1","2014/09/02 19:30:15","2014/09/02 10:30:15","2014/09/02 19:30:15","2014/09/02 10:30:15","2014/09/02 19:30:15","2014/09/02 10:30:15","Archive" "Microsoft.PowerShell.Core\FileSystem::C:\script-test\test1.csv","Microsoft.PowerShell.Core\FileSystem::C:\script-test","test1.csv","C","Microsoft.PowerShell.Core\FileSystem","False","File: C:\script-test\test1.csv InternalName: OriginalFilename: FileVersion: FileDescription: Product: ProductVersion: Debug: False Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language: ","test1","-a---","test1.csv","2619","C:\script-test","C:\script-test","False","True","C:\script-test\test1.csv",".csv","2014/09/04 23:15:30","2014/09/04 14:15:30","2014/09/04 23:15:30","2014/09/04 14:15:30","2014/09/04 23:15:30","2014/09/04 14:15:30","Archive" "Microsoft.PowerShell.Core\FileSystem::C:\script-test\test1.ps1","Microsoft.PowerShell.Core\FileSystem::C:\script-test","test1.ps1","C","Microsoft.PowerShell.Core\FileSystem","False","File: C:\script-test\test1.ps1 InternalName: OriginalFilename: FileVersion: FileDescription: Product: ProductVersion:

  • PowerShellでファイルの連結方法

    PowerShellでファイルの連結をしたいと思っています。 例えば、C:\にa.csv、b.csv、c.csvがあったとします。 Get-Contentを実行すると、問題なくCSVの中身が出力されます。 次に、ネットにあったファイル結合方法を試してました。 Get-Content *.csv > output.csv 実行すると、output.csvに次々とデータが追加されて、ループ状態でどんどん増えていきます。 強制終了で終了させましたが、1回のみファイルの結合をしたいと思いますが、どのようにすればよいでしょうか?

  • PowerShellからPowerShellを呼び出す方法

    PowerShellからPowerShellを呼び出す方法 次のバッチファイルと同等の事をPowerShellで行う方法を教えて下さい。 下記のような非常に簡易的なバッチファイルがあるとします。 ■ aaa.bat ■ echo test ■ aaa.bat ■ ■ bbb.bat ■ aaa.bat > aaa.log ■ bbb.bat ■ ■ コマンドプロンプト ■ cmd> aaa.bat ・・・ 下に「test」と出力される test cmd> bbb.bat ・・・ ファイルaaa.logに「test」と出力される ■ コマンドプロンプト ■ 同じ事をPowerShellでするとすれば ■ aaa.ps1 ■ echo "test" ■ aaa.ps1 ■ ■ PowerShellの画面から ■ PS > ./aaa.ps1 ・・・ 下に「test」と出力される test PS > ./bbb.ps1 ・・・ ファイルaaa.logに「test」と出力される ■ PowerShellの画面から ■ この時の「bbb.ps1」はどのようになりますか?

  • PowerShellでCSVを文字列に組立る方法

    以下の内容のCSVファイルから「CN=test,OU=test_ou,DC=test,DC=domain」の結果を最小限のPowerShellで得るにはどのようにすればよろしいでしょうか? Name,OU,Domain test,test_ou,test.domain いろいろ試してみたのですが、きれいにこの形にできませんでした。 よろしくお願いいたします。

  • PowerShell ファイル連結&出力方法

    PowerShellについてお教え下さい。Cドライブ直下に100のCSVファイルがあります。ヘッダーがある為、全CSVファイルの2行目以降を連結させて1ファイルを作りたいと思っています。 そこで下記のようなスクリプトを書きました。 Get-ChildItem $path | % {Get-Content $_ | Select-Object -Skip 1} > xxx.csv しかし、xxx.csvにデータは出力されるのですが、ループ状態に陥ってしまいファイル容量がどんどん増えていってしまいます。これを解決するにはどのようにしたらよいでしょうか? よろしくお願いします。

  • Powershellでtsファイルをmp4に変換

    Powershellでtsファイルを無劣化でmp4に変換する事が出来そうなので 下記の記事を参考にスクリプト(test.ps1)を作成してみました。 http://pcsos.blog89.fc2.com/blog-entry-243.html '-------------------------------------------------- # MP4・MPG・WMV・TS ⇒ H.264 MP4 (PowerShell ファイル名スペース対応) $TARGET_DIR="C:\Users\ssd\Desktop\変換前\" $DEST_DIR="C:\Users\ssd\Desktop\変換後\" $FFMPEG="C:\ffmpeg-2022-12-11\bin\ffmpeg.exe" $FFMPEG_OPT_VIDEO="-c:v copy" $FFMPEG_OPT_AUDIO="-c:a copy" function h264enc { if ($args.count -ge 1) { $arg="-i '$args.mpg' -movflags faststart $FFMPEG_OPT_VIDEO $FFMPEG_OPT_AUDIO $DEST_DIR'$args.mp4'" powershell -Command "$FFMPEG $arg" } else { "エンコード対象のファイルを指定してください。" } } cd $TARGET_DIR Get-ChildItem | ForEach-Object { h264enc $_.Basename } pause '-------------------------------------------------- 変換されそうにはなりますが、   mpegを書き出し時に 「No such file or directory」とエラーになります。 エラーの修正をお願いします。

  • PowerShellの文字操作について

    恐れ入ります、Powershellを、独学でWebで、調べな柄試しているのですが、よくわからなく、初心者で申し訳ないのですが、ご指導いただけますと幸いです。 やりたいことは、CSVファイル1内から、項目Bの”AAA”を含む文字を抽出して、項目Cと別のCSVファイル2の項目で値が一致しないものを、別CSVファイルにしたいというものなのですが、 CSVファイル1の項目Bから条件一致するデータが抜き出せず、困っております。 $a = Get-Content C:\test\\1.csv | Where-Object {$_.B -like "AAA*"} |out-file C:\test\X.csv -encoding Default | Where-Object {$_.B -like "AAA*"} が良くないのか、Out-fileでファイルが作成されるのですが、中にデータが0で抽出ができませんでした。 どこでうまくいっているのかを確認する方法もわからなくて質問して本当に申し訳ありませんが、少しでも何かヒントいただけると助かります。どうぞよろしくお願いいたします。

  • PowerShellのスクリプト実行について

    PowerShellのスクリプト実行について PowerShellの勉強をしていますが、スクリプトを実行できません。。。 なんか、スクリプトの環境変数を設定するようですが、どこにも 設定方法がないです。。。。 もちろん、Set-ExecutionPolicy Unrestrictedは実行してあります。 以下日付と時間を表示するだけのスクリプトです。 ---------test.ps1--------- get-date get-time ---------------------------- スクリプトファイルの置き場所 ⇒ C:\script-test\test.ps1 ちなみに、スクリプトファイルを置いたディレクトリに移動して 実行しても、以下のようなメッセージが出て実行できませんでした。。 用語 'C:\script-test' は、コマンドレット、関数、スクリプト ファイル、または操作 可能なプログラムの名前として認識されません。名前が正しく記述されていることを確 認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく ださい。 発生場所 行:1 文字:15 + C:\script-test <<<< .\test.ps1 + CategoryInfo : ObjectNotFound: (C:\script-test:String) []、Comma ndNotFoundException + FullyQualifiedErrorId : CommandNotFoundException どなたかご教授下さい。

専門家に質問してみよう