ファイル名:test_yyymmdd.csv
yyymmddはfget-dateで他シェルでExport-csvの際に現在日時で変更される
Import-Csvでファイル名を指定する場合想定される構文としては
、
$filepath =test_*.csv or test_\d.csv
Import-csv = $filepath
で対応可能かと思いましたが、エラーとなりました。
素人質問で申し訳ございませんが、ご教授の程お願い致します。
①ファイルパスが複数指定されているように見えます。質問の内容と合致せずやりたいことが分かりません。
・読み込むファイルは1つでよい?
・複数ある場合、データがマージ(結合)される形でよい?
②ファイルパスの「*」の意味が分かりますでしょうか。「*」がある時点で、「test_\d.csv」も包含されてますので記載不要です。
単一csvファイルを読み込みたいだけなら以下のようになります。
$filepath = "test_yyyymmdd.csv"
Import-Csv -path $filepath
haihaikazuma様
ご回答ありがとうございます。
①
やりたいこととして、シェルで処理したCSVファイルをリネームし数日後に同様のCSVファイルとを
比較したい。
シェルでCSVファイルを出力する際使用するコマンド
-------------------------
$yyyyMMdd = get-date -format yyyyMMdd
$filepath = "test_$yyyyMMdd.csv"
Export-csv $filepath
-------------------------
[得られるCSVファイル]
・test_20210824.csv →過去に出力したCSV
・test_20210825.csv →現在出力したCSV
比較する際、上記CSVファイルを"Import-Csv"読み込ませてCompare-Objectで比較し、差分を確認したい。
$filepath = "test_yyyymmdd.csv"
$filepath2 = "test_whitelist_yyyymmdd.csv"
$a = Import-Csv -Path $filepath
$b = Import-Csv -Path $filepath2
その際、出力する日によってyyyymmddが異なるのでImport-csvに取り込むファイル名指定の対応をご教授
願いたいとの内容となります。
回答頂いた
$filepath = "test_yyyymmdd.csv"
Import-Csv -path $filepath
では、エラーとなり、
Import-Csv : ファイル "" が見つかりませんでした。
とのエラー内容となりました。
以上、よろしくお願いいたします。
>その際、出力する日によってyyyymmddが異なるのでImport-csvに取り込むファイル名指定の対応をご教授願いたいとの内容となります。
状況承知しました。
であれば、1つのImport-csvで複数のCSVを別々で読み取るのはできない認識です。
以下のように、ファイルパスに含まれるファイルの情報を見に行って、csvファイルをソートするなどして該当のファイル名を取得できるようにする必要があります。
以下は一例です。
$itemsInfo = Get-ChildItem -Path .\*.csv #とりあえず全csvファイル持ってきて
$itemsName = ($itemsInfo | Sort-Object -Property Name).Name # 昇順に並び替える
$itemsName[0] # (CSVが1日1回吐き出されるとしたら)今日のデータファイル名
$itemsName[1] # 昨日のデータファイル名
ファイルが見つからないのは、パスの指定が誤っているか、該当するデータがないのでパスにファイルが存在するか確認いただければと思います。
ご回答ありがとございます。頂いた一例を元に対応し比較対応ができました。
ありがとうございました!
解決済みにしておいてください.....
あなたの回答
tips
プレビュー