2017-12-22 4 views
1

Get-Childitem cmdlet을 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 cmdlet을 울리는되지 않습니다 또한 파일을 선택하지 않습니다. 누구든지 내 코드에서 오류를 지적 할 수 있습니까?

감사합니다.

+1

Probaly 당신이 이것을 filesnames를 표시해야하고, * $ ($ ASIN.Files) ''와 같은 필터 무언가에 그것을 사용하는 에코'$ 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