基于元数据的foreach循环中的复制项

时间:2017-01-04 17:11:02

标签: windows powershell foreach scripting copy-item

在此脚本中,我识别一组图片的元数据,然后在if循环内运行foreach语句,将具有特定日期的一个文件夹中的所有图片复制到新目录中日期。

我的问题在于Copy-Item,或者我认为。如果我使用变量$file$,它只是将另一个目录放在上一个目录中。我拥有它的方式不只是将所有图片复制到该目录中,尽管它包含在if语句中。

$fol = "C:"

foreach ($file in $fol) {

    $data1 = Get-FileMetaData "C:"
    $data2 = $data1 | Select-Object 'Date taken'

    if ($data2 -like '*2006*') {

        if(!(Test-Path "C:\2006")) {
            New-Item -ItemType Directory -Path "C:\2006"
        }

        Copy-Item  "C:\*" "C:\2006"         
        echo $data2
    } else {
        echo 'no'
    }
}

echo $data2显示:

return

2 个答案:

答案 0 :(得分:0)

为什么使用metatdata查找创建日期。您可以使用creationtime

试试这个

#if you want move for specific year
$destination="c:\destination\2016"
New-Item -ItemType Directory $destination -Force
Get-ChildItem "c:\temp\" -Recurse -File -Filter "*.png" | Where {$_.CreationTime.Year -eq 2016} | %{Copy-Item $_.FullName "$destination\$($_.Name)" }

#if you want copy all image png by year of creation
$destination="c:\destination"

Get-ChildItem "c:\temp\" -Recurse -File -Filter "*.png" | group {$_.CreationTime.Year} | 
%{
$DirYear="$destination\$($_.Name)"
New-Item -ItemType Directory $DirYear -Force
$_.Group | %{Copy-Item $_.FullName "$DirYear\$($_.Name)" }
}

答案 1 :(得分:0)

其他解决方案

#explicite version
Get-ChildItem "c:\temp\" -Recurse -File -Filter "*.png" |
    ForEach-Object {Copy-Item $_.FullName (New-Item -ItemType Directory "$destination\$($_.CreationTime.Year)" -Force).FullName}

#short version
gci "c:\temp\" -R -File -Fi "*.png" |
    % {cpi $_.FullName (ni -I Directory "$destination\$($_.CreationTime.Year)" -Force).FullName}