2017-12-22 18 views
1

Get-ChilditemコマンドレットにCSVの内容をフィルタリングしようとしています。フィルタGet-Childitem to CSVの内容

CSV内容:

Files 
------ 
B000000001 
B000000002 

実際のファイル名:

B000000001.PT01.jpg 
B000000002.PT03.jpg 

これは私が持っているものです。

$ASINs = Import-Csv "C:\share_test.csv" 
foreach($ASIN in $ASINs){ 
    echo $ASIN 
    Get-ChildItem -Path "C:\test1" -Filter "*$ASIN*" | Copy-Item -Destination "C:\test2" 
} 

似アイテムはコピーが、Get-Childitemコマンドレットをエコーされていませんまた、ファイルを取得していません。誰でも私のコードでエラーを指摘できますか?

ありがとうございます!

+1

Probalyあなたは、エコーでこのようにファイル名をコールする必要があるため、 '$ ASIN.Files'これはfilesnamesを表示する必要があり、フィルターに' "* $($ ASIN.Files)のようなものを、それを使用します* "' – Paxz

答えて

3

Import-CSVを使用すると、各列のヘッダーがプロパティ名になります。あなたのcsvの各行は、Get-Contentから得られるような文字列の配列ではなく、Nameプロパティを持つオブジェクトです。

サブ表現演算子$()を使用して、フィルタ内に$ASIN.Filesを補間することができます。

$ASINs = Import-Csv "C:\share_test.csv" 
foreach ($ASIN in $ASINs) { 
    Get-ChildItem -Path "C:\test1" -Filter "*$($ASIN.Files)*" | Copy-Item -Destination 
    "C:\test2" 
} 
+0

パーフェクト!追加情報をお寄せいただきありがとうございます。この回答の詳細については、 https://ss64.com/ps/syntax-operators.html – Garrett

+0

を参照してください。さらにテストすると、提供されたコードはすべてのファイルを移動しています。 CSV。その上の任意のアイデア? – Garrett

+1

@Garrett私はこの作業を私のためにテストしました。 CSVのヘッダーが一致し、CSVに空白の値がないことを確認していますか? – BenH