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)
- 関連記事
スポンサーリンク
コメント