none
CSVファイルを読み込んで取得した列の値に該当するファイル名を検索したい RRS feed

  • 質問

  • CSVファイルを読み込んで取得した値に該当するフォルダ名(およびファイル名)を検索したいと考えています。

    現在は下記式でCSVファイルを読み込み、列「Folder」の値と列「File」の値を取得していますが、
    対象フォルダ内から「Folder」列の値に該当するフォルダ名を検索し、
    かつ、そのフォルダ内から「File」列の値が該当するファイルを取得したいです。

    「Get-ChildItem」 「-Filter」 「foreach」を組み合わせて作成していましたが、
    まったく実現できていない状況です。
    何かヒントでも構いませんのでお力添えいただきたく質問させていただきました。
    よろしくお願いいたします。


    ∇式
    $csv = Import-csv .\Sample.csv 
    $folder = $csv.Folder
    $file = $csv.File


    ∇Sample.csv
    Folder     File 
    --------           -------             
    AAA                aaa
    BBB                bbb
    CCC                ccc
    DDD               ddd
    EEE                eee


    ∇結果
    \AAA\aaa20191022.csv
    \AAA\aaa20191023.csv
    \BBB\bbb20191023.csv
    \CCC\ccc20191023.csv
    \DDD\ddd20191022.csv
    \DDD\ddd20191023.csv
    \EEE\eee20191023.csv

    2019年10月23日 6:06

回答

  • 説明文では完全一致の存在するファイル探しみたいですが、結果の説明を見るとファイル検索は部分一致のファイル探しでしたので、後者かなという前提でサンプルです。※載せていませんが、$dir はテスト用フォルダのパスです。

    # csv を読み込む
    $csv = Import-Csv .\sample.csv
    
    # 1行ずつループ
    foreach ($line in $csv)
    {
        # 任意のフルパスを準備、そのフォルダが存在する場合、
        $folder = $dir + "\" + $line.Folder
        if (Test-Path $folder)
        {
            # そのフォルダ内に、パターンに一致するファイルを取得(aaa*.*, aaa20191231.csv など)
            $files = (Get-ChildItem -Path $folder -Filter "$($line.File)*.*")
            $files
        }
    }



    • 編集済み sutefu7 2019年10月24日 7:26 説明モレのため追記
    • 回答としてマーク Lopez0312 2019年10月25日 6:27
    2019年10月24日 7:23