从CSV内容复制具有类似文件名的项目

时间:2017-12-20 20:41:54

标签: powershell import-csv

我正在尝试创建一个简单的脚本,该脚本可以读取CSV文件,并查找名称包含CSV内容的文件(.jpgs),然后将这些文件复制到新位置。

CSV内容将采用以下格式,'文件'是标题:

Files
------
B000000001
B000000002

文件名将采用以下格式:

B000000001.PT01.jpg
B000000002.PT03.jpg

这是我到目前为止所做的:

$ASINs = Import-Csv "C:\share_test.csv"
foreach($ASIN in $ASINs){
GCI -Path "C:\test1" | Where-Object{$_.Name -like $ASIN} | Copy-Item -Destination "C:\test2"
}

我没有收到错误,但它没有复制匹配的文件。

时,我似乎总是遇到Copy-Item的问题,所以任何帮助都是值得赞赏的。

编辑: 好的,谢谢大家的建议。这就是我现在所拥有的:

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

仍然没有骰子!我究竟做错了什么?我尝试使用和不带引号的-Filter

再次感谢!

2 个答案:

答案 0 :(得分:1)

-like运算符允许使用通配符,但没有通配符,它​​就像-eq一样工作,即您正在查找例如文件名恰好是B000000001而不是B000000001.PT01.jpg

您可以根据需要添加通配符来解决此问题:

 Where-Object{$_.Name -like "*$ASIN*"}

它更快,建议过滤“左”但是:

Get-ChildItem -Path "C:\test1" -Filter "*$ASIN*"

在这种情况下,不需要Where-Object

答案 1 :(得分:0)

我快速尝试了一下,我必须做出一些改变。 首先,我使用了-match运算符,其次我在使用运算符

时包含了属性Files
$('.date1').click(function() {

我尝试使用以下

比较字符串和$ ASIN来测试@vrdse提到的内容
Where-Object{$_.Name -match $ASIN.files}

但是在我将其更改为

之前,这也没有返回任何内容
"B0003" -like "*$Asin*"