• ベストアンサー

PowerShellでファイルの連結方法

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

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

PowerShell のことは全く知らないのですが、これはひょっとして output.csv の内容を読み出しながら読み込んだ内容を output.csv に追記していっているのではないでしょうか。 たとえば output.csv が(それまでの処理で)10 行あったとして、 1 行目読み込み  ↓ 読み込み内容を 11 行目として追記  ↓ 2 行目読み込み  ↓ 読み込み内容を 12 行目として追記  ↓ ……(中略)……  ↓ 10 行目読み込み  ↓ 読み込み内容を 20 行目として追記  ↓ (最初はなかった)11 行目読み込み  ↓ 読み込み内容を 21 行目として追記  ↓ ……(以下略)…… という事になっているのではないかと。 対処法として Get-Content *.csv > output.temp としてから output.temp を output.csv にリネームするというのを思いついたのですがいかがでしょうか。

fflashing
質問者

お礼

なんと!PowerShellを知らないのに適切なご回答ありがとうございます。お教え頂いた通りにoutput.tmpとして実行したら普通にできました。 おそらくお教え頂いた通りのような事がおこなわれているが為に、起こっている現象のような気がします。気づきませんでした。本当にありがとうございます。

関連するQ&A

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

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

  • PowerShellについて

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

  • powershell で特定の文字を削除したい

    powershell でコマンドの学習をしており、どうしてもやりたいことが実現できないので御教示いただきたく存じます。 学習中のパソコンのOSはWindows 7 になります。 ■前提 以下のA.txt と B.txt と C.txt があります。  ・A.txt の中身   aaa   bbb   123   456   789  ・B.txt の中身   aaa   456  ・C.txt の中身   $PSV   $Object   A123456   123   456   789   6741 ■やりたいこと A.txt と B.txt を比較して差分結果を D.txt に出力します。 次に、D.txt の数値を行ごと削除するために C.txt を使って削除したいのですが、うまくいきません。 実行したコマンドは下記になります。 ・Powershell Compare-Object (Get-Content A.txt) (Get-Content B.txt) -PassThru | Out-File D.txt -encoding Default Get-Content D.txt | Select-String "C.txt" -NotMatch コマンドが思った動作にならないため、お知恵を拝借したいです。 よろしくお願いいたします。 追加質問: 二回に分けてコマンドを実行していますが、一回のコマンドで出来たりしますか?

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

  • powershellでcsvの順次読みこみ

    powershellでcsvの順次読みこみ powershellで下記のような事はできますか? <in_file.csv> a,1,A b,2,B c,3,C これを読み込み <out_file.csv> =1=《A》【a】 =2=《B》【b】 =3=《C》【c】 のように個別の項目を編集して出力

  • powershellでのソート

    powershellでのソート処理に関して教えてください。 list.csv F1,F2,F3 file01.txt,c:\dirA,100kb file20.txt,c:\dirC,100kb file100.txt,c:\dirG,100kb file200.txt,c:\dirG,100kb CSVで上記の様なデータがあり、F1のデータにおいて、 ファイル名の数字部分でソートしたいのですが、 意図したソートができません。 数字を考慮してのソートってどうやればよいでしょうか。 PS c:\>Get-Content .\list.csv|ConvertFrom-CSV |Sort-Object f1 F1 F2 F3 -- -- -- file01.txt c:\dirA 100kb file100.txt c:\dirG 100kb file20.txt c:\dirC 100kb file200.txt c:\dirG 100kb file01.txt→file02.txt→file100.txt→file200.txtの並びでソートさせたいです。 よろしくお願いします。

  • 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で抽出ができませんでした。 どこでうまくいっているのかを確認する方法もわからなくて質問して本当に申し訳ありませんが、少しでも何かヒントいただけると助かります。どうぞよろしくお願いいたします。

  • バッチでsqliteコマンドとして認識される

    以下のようなsqliteよりCSVファイルにエクスポート パワーシェルで文字コードをShift-Jisに変更すると、powershellコマンドがsqliteのコマンドとして認識され実行されません。バッチを分けても同じ結果となりました。一旦sqliteを終了させるにはどのようにしたらよいでしょうか。 エラー表示:'powershell' is not recognized as an internal or external command, 以下バッチ chcp 932 > nul sqlite3.exe "%DB_FILE%" "select * from table;" -header -csv > "%CSV_OUTPUT_FILE%" powershell -Command "(Get-Content '%FILE%' -Encoding UTF8) | Set-Content -Encoding Default -Path '%FILE%'" ご教示よろしくお願いいたします。

  • 簡単なPowerShell

    Windows10のPowerShellで、ディレクトリを作りたいのですが、本日の日付の翌日の日付をyyyymmdd の形式で表した名前のフォルダを作りたいです。 例えば、本日が2022年5月25日であれば、c:\xxx\に、20220526 というフォルダを自動生成したいです。 最終的には、Windowsキー+R キーでファイル名を指定して実行から これが起動できればOKなのですが、何かスクリプトのようなものを作らなければなりませんか?(PowerShellド素人です) (Get-Date).AddDays(+1).ToString("yyyyMMdd") で翌日のyyyymmddを 取り出せることはわかったのですが、それを使って c:\xxxにフォルダはどう作るのかすらわかっていません。 mkdir c:\xxx\(Get-Date).AddDays(+1).ToString("yyyyMMdd") はやっても無駄でした。文法がわからず困ってます。

  • powershellの配列について

    すみませんが、powershellの配列について、困っていることがあります。 下記に教えていただければと思います。 【やりたいこと】 スペースがバラバラに入っているファイルの中身を配列に格納したい。 その際、スペースを省いて数字のみ配列に入れたい 【今の状態】 > $test4 = $(Get-Content -path "C:\a.txt") > echo $test4 1 2 3 4 5 6 7 89 > write-host $test4[0] 1 > write-host $test4[1] (スペースが認識されてしまう) > write-host $test4[2] 2 【望む結果】 $test4にファイルの中身を格納する。 その後、以下の結果にしたい。 > write-host $test4[0] 1 > write-host $test4[1] 2 > write-host $test4[7] 89

専門家に質問してみよう