powershellでCSVを読み込んで2列目を特定の文字に置き換えて再度CSVに出力したい

ぷんち 100 評価のポイント
2024-05-21T06:42:35.1533333+00:00

いつもお世話になっています。

CSVを読み込んで2列目に該当する内容を変更して再度CSVにしたいです。

c:\input.csv

0,2024/05/01,レコード

0,2024/05/01,CD

0,2024/05/01,DVD

というようなデータがあります。

これを読み込んで2024/05/01を2024/05/02に変更したいのですが下記のように記述するとうまくいかないです。

$dt1="2024/05/02"

$dt2="2024/05/01"

$Data1 = Import-Csv -Encoding Default -Path c:\input.csv -Header "col1","col2","col3"

$Data1 -replace($dt2,$dt1) | Out-File c:\output.csv -Encoding Default

出来上がったファイルを見ると

@{col1=0; col2=2024/05/02; col3="レコード"}

@{col1=0; col2=2024/05/02; col3="CD"}

@{col1=0; col2=2024/05/02; col3="DVD"}

となっています。

Export-Csvにすると

$Data1 -replace($dt2,$dt1) | Export-Csv -path c:\output.csv -NoTypeInformation

"Length"

"37"

"35"

"36"

となります。

どうすればCSVファイルに正しく出力できるでしょうか?

ご教授お願いします。

PowerShell
PowerShell
コマンドライン シェルと関連するスクリプト言語で構成される Microsoft タスク自動化および構成管理フレームワークのファミリ。
24 件の質問
0 件のコメント コメントはありません
{count} 件の投票

承認済みの回答
  1. gekka 9,916 評価のポイント MVP
    2024-05-21T09:07:39.95+00:00

    こんな

    $inputPath  = "c:\temp\input.csv"
    $outputPath = "c:\temp\output.csv" 
    
    $textFrom = "2024/05/01"
    $textTo   = "2024/05/02"
    
    
    Import-Csv -Encoding Default -Path c:\X\input.csv -Header "col1","col2","col3" <# CSVファイルを読み込む #> `
        | ForEach-Object -Process {
            $_.col2 = $_.col2.Replace($textFrom , $textTo);  <# col2列の文字列を置換 #> `
            $_ }  <# 置換した行の値を後段のパイプに流す #> `
        | ConvertTo-Csv -NoTypeInformation <# CSVに戻す(余計な型情報は出さない) #> `
        | Select-Object -Skip 1  <# ヘッダ行はスキップ #> `
        | Set-Content -Encoding Default -Path $outputPath; <# ファイルに書き出し #>
    
    1 人がこの回答が役に立ったと思いました。

0 件の追加の回答

並べ替え方法: 最も役に立つ

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。