【问题标题】:Copy items with similar filenames from CSV content从 CSV 内容复制具有相似文件名的项目
【发布时间】:2017-12-20 20:41:53
【问题描述】:

我正在尝试创建一个可以读取 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 加引号和不加引号。

再次感谢!

【问题讨论】:

  • 您没有收到任何错误,因为您没有正确比较对象并且您的管道是空的。 Get-ChildItem -Path 'C:\test1' -Filter *$ASIN*,不需要Where-Object 来验证文件名;它只会减慢速度。

标签: powershell import-csv


【解决方案1】:

-like 运算符允许使用通配符,但没有通配符,它​​的工作方式与 -eq 一样,即您正在寻找例如一个完全是 B000000001 而不是 B000000001.PT01.jpg 的文件名。

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    Where-Object{$_.Name -match $ASIN.files}
    

    我尝试通过使用以下方法比较字符串和 $ASIN 来测试 @vrdse 提到的内容

    "B0003" -like "*$Asin*"
    

    但这也没有返回任何内容,直到我将其更改为

    "B0003" -like "*$($Asin.files)*"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 2021-09-24
      • 2022-11-25
      • 2016-12-27
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      相关资源
      最近更新 更多