CSVにダブルクォーテーションをつけるには?
- 試した環境
- つくるもの
- 作成手順
- ちょっとだけ説明
試した環境
- Windows 8.1
- PowerShellのバージョンは 4
つくるもの
- batファイル
- ダブルクリックしたらbatファイルと同じ階層に「temp」フォルダを作成
- batファイルと同じ階層にあるCSVファイルが変換対象
- batファイルと同じ階層にあるCSVファイルはそのまま残す
- 「temp」フォルダ内にダブルクォーテーション付きに変換したCSVファイルを入れていく
作成手順
- 「add-double-quotes.bat」というファイルを作る
- 右クリックで「編集」を選択
- 以下のコードをコピペ
ちょっとだけ説明
$d='.\temp';
$dという変数にこれから作るフォルダのパス(相対パス)を退避している。
;をつけるとコマンドレットを連続して実行することができる。
この場合は変数に代入するステートメントを完了させたいので;をつけてる。
ni $d -t d -f > $null;
niはNew-Itemのエイリアス(別名)。$dは先ほどフォルダパスを退避した変数。
-t dは省略せずに書くと-ItemType Directory、つまり「フォルダを作る」の意。-ItemType Fileなら「ファイルを作る」を意味する。
-fは省略せずに書くと-Force。これをつけない場合、すでにあるフォルダを作成しようとするとエラーとなる。-fをつけておくとすでに存在する場合は何もしない。
> $nullは出力結果を破棄している。なぜこんなことをするのか。それはniでフォルダを作成すると、そのフォルダの情報を表示しようとするから。以降の処理の邪魔になるので出力結果を破棄する(何も表示させない)ようにしている。
;は先ほどと同様、フォルダ作成の処理を終了させるため・次の処理を実行させるためにつけている。
ls
lsはGet-ChildItemのエイリアス。Linuxのlsコマンドとよく似ている。カレントディレクトリ内のものを列挙してくれる。
|
|はパイプライン。左側のコマンドの出力を右側のコマンドの入力にすることができる。
?{$_.Name -like '*.csv'}
?はWhere-Objectのエイリアス。入力に対して条件に該当するものだけにフィルタリングすることができる。SQLのWhereと似てる。
$_.Name -like '*.csv'はSQLと同じで項目(この場合lsコマンドの出力結果にあるNameの項目)に対して抽出したい条件を書いている。
|foreach{$f=Join-Path $d $_.Name;gc $_.Name|ConvertFrom-CSV|ConvertTo-CSV -n|sc $f}
foreach{}はプログラム言語でよくみるループのやつ。入力されたもの(今回の場合は見つかったCSVのファイル名)ごとに繰り返し処理を行う。
$f=Join-Path $d $_.Name;はファイルの出力先パスを組み立てている。先ほどの変数$d(「temp」フォルダのパス)で$_.Nameは見つけたCSVファイルの名前。
gcはGet-Contentのエイリアス。ファイルの中身を読み取ることができる。Linuxのcatみたいなやつ。
ConvertFrom-CSVはCSVデータを一旦PSCustomObjectとかいうやつに変換している。
ConvertTo-CSVでは一旦PSCustomObjectに変換したものを再度CSVデータに変換している。
この時にダブルクォーテーションが付加される。
ただ-nti(省略せずに書くと-NoTypeInformation)をつけておかないと入力元の型名のコメント行が1行ついてしまう。
scはSet-Contentのエイリアス。ファイルなどに書き込むことができる。
今日はここまで。疲れた〜。
[広告]
Microsoft Public Affiliate Program (JP)
- 関連記事
-
-
CSVにダブルクォーテーションをつけるには?
-
コマンドラインで指定秒だけスリープさせる方法
-
WindowsServer2012R2 + IIS + Django + wfastcgiの環境構築
-
レジストリエディタ
-
スポンサーリンク
コメント