我正在尝试创建一个简单的脚本,可以读取CSV文件,并查找名称包含CSV内容的文件(.jpgs),然后将这些文件复制到新位置。
CSV内容将采用以下格式,'files'是标题:
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
。
再次感谢!
-like
运算符允许使用通配符,但没有通配符,它就像-eq
一样工作,即你正在寻找例如一个文件名恰好是B000000001
而不是B000000001.PT01.jpg
。
您可以根据需要添加通配符来解决此问题:
Where-Object{$_.Name -like "*$ASIN*"}
它更快,建议过滤“左”但是:
Get-ChildItem -Path "C:\test1" -Filter "*$ASIN*"
在这种情况下,不需要Where-Object
。
我有一个快速的尝试,我必须做一些改变。首先我使用-match操作符,然后在使用操作符时包含属性Files
Where-Object{$_.Name -match $ASIN.files}
我尝试使用以下内容比较字符串和$ ASIN来测试@vrdse提到的内容
"B0003" -like "*$Asin*"
但是在我改变它之前,这也没有返回任何东西
"B0003" -like "*$($Asin.files)*"