在此脚本中,我识别一组图片的元数据,然后在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
显示:
答案 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}