Hallo,
ich möchte alle Fotos (jpg) nach Aufnahmedatum in datumbenannte Ordner verschieben und eventuell diesen auch erstellen, wenn er nicht vorhanden ist. Die Dateien liegen im Ordner "c:\Test\sort" und die datumbenannte Ordner sollen in "c:\Test" erstellt werden.
Beispiel:
aaaaaa.jpg Erstellt am 01.04.2016 soll in den Ordner 2016.04 verschoben werden
bbbbbb.jpg Erstellt am 01.05.2016 soll in den Ordner 2016.05 verschoben werden
mein noch nicht funktionierendes Skript in Powershell:
hoffe jemand kann mir weiterhelfen
schon mal danke im Voraus
ich möchte alle Fotos (jpg) nach Aufnahmedatum in datumbenannte Ordner verschieben und eventuell diesen auch erstellen, wenn er nicht vorhanden ist. Die Dateien liegen im Ordner "c:\Test\sort" und die datumbenannte Ordner sollen in "c:\Test" erstellt werden.
Beispiel:
aaaaaa.jpg Erstellt am 01.04.2016 soll in den Ordner 2016.04 verschoben werden
bbbbbb.jpg Erstellt am 01.05.2016 soll in den Ordner 2016.05 verschoben werden
mein noch nicht funktionierendes Skript in Powershell:
Code:
function Get-ScriptDirectory {
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $Invocation.MyCommand.Path
}
function Add-ExtendedFileProperties{
<#
.SYNOPSIS
Fügt erweiterte Eigenschaften von Dateien an das Objekt in der Pipline hinzu
.DESCRIPTION
Extrahiert erweiterte Eigenschaften von Dateien wie z.B. Exif-Daten, Musik- bzw. Filmdetails
.EXAMPLE
Get-ChildItem "C:\Temp" | Add-ExtendedFileProperties -PropertyExtended "Bildhöhe","Bildbreite","Datenrate" | ft Name,Bildhöhe,Bildbreite,Datenrate
Fügt alle nur die Eigenschaften "Bildhöhe","Bildbreite","Datenrate" als zusätzliche Spalten dem Objekt in der Pipline hinzu
.EXAMPLE
Get-ChildItem "C:\Temp" | Add-ExtendedFileProperties | fl *
Fügt alle verfügbaren erweiterten Eigenschaften dem Objekt in der Pipline hinzu
.PARAMETER PropertyExtended
Mit diesem Parameter geben sie eine Komma-Separierte Liste von Eigenschaften an welche sie erhalten möchten.
-PropertyExtended "Bildhöhe","Bildbreite","Bitrate"
#>
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
$fileItem,
[String[]] $PropertyExtended = "ALL"
)
begin
{
$shellObject = New-Object -Com Shell.Application
$itemProperties = $null
}
process
{
if($fileItem.PsIsContainer)
{
$fileItem
return
}
$directoryName = $fileItem.DirectoryName
$filename = $fileItem.Name
$folderObject = $shellObject.NameSpace($directoryName)
$item = $folderObject.ParseName($filename)
if(-not $itemProperties)
{
$itemProperties = @{}
$counter = 0
$columnName = ""
if ($PropertyExtended -eq "ALL"){
#get all properties
do {
$columnName = $folderObject.GetDetailsOf($folderObject.Items, $counter)
if($columnName) { $itemProperties[$counter] = $columnName }
$counter++
}while($columnName)
}else{
#get user defined properties
do {
$columnName = $folderObject.GetDetailsOf($folderObject.Items, $counter)
foreach($name in $PropertyExtended){
if ($columnName.toLower() -eq $name.toLower()){
$itemProperties[$counter] = $columnName
}
}
$counter++
}while($columnName)
}
}
foreach($itemProperty in $itemProperties.Keys)
{
$fileItem | Add-Member NoteProperty $itemProperties[$itemProperty] `
$folderObject.GetDetailsOf($item, $itemProperty) -ErrorAction `
SilentlyContinue
}
$fileItem
}
}
$ordner = Get-ScriptDirectory
$fileordner = "$ordner\sort"
dir $fileordner -File |Add-ExtendedFileProperties -PropertyExtended "Aufnahmedatum" | group {$_.Aufnahmedatum.Substring(0,10)} | group {Get-Date $_.Aufnahmedatum -format yyyy.MM} | %{
$ziel = "$ordner\$($_.Name)"
if (!(test-path $ziel)){md $ziel -Force}
$_.Group | move-item -Destination $ziel -EA Ignore
}
hoffe jemand kann mir weiterhelfen
schon mal danke im Voraus
Zuletzt bearbeitet:
(Falscher Titel)