Archiv des Intrexx Live! Forums

Hier sehen Sie die Foreneinträge aus dem Intrexx Live! Forum. Bis November 2016 war es das Forum für alle Fragen rund um die Software Intrexx von United Planet.
Seit November 2016 gibt es ein neues moderiertes Forum, das Intrexx Community Forum. Nutzen Sie bitte unbedingt dieses für aktuelle Fragen, Antworten und Informationen.

Wichtig: Dieses Forum dient als Archiv. Die Einträge beziehen sich oft auf ältere Versionen von Intrexx und entsprechen nicht mehr den aktuellen technischen Gegebenheiten.
Daher sollten alle Inhalte ausschließlich von Experten genutzt werden. Bei unsachgemäßer Anwendung kann es zu zeitaufwändigen Problemen oder Datenverlust kommen.
Übersicht > Intrexx Professional: Programming > Bilddateien per Powershell-Skript nach Aufnahmedatum sortiert in Ornder verschieben

Bilddateien per Powershell-Skript nach Aufnahmedatum sortiert in Ornder verschieben

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:
[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 = (at){}
$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
}[/CODE]
Wenn ich an dieser Stelle
[CODE]...
dir $fileordner -File |Add-ExtendedFileProperties -PropertyExtended "Aufnahmedatum" |

group {$_.Aufnahmedatum.Substring(0,10)} | group {Get-Date $_.Aufnahmedatum -format

yyyy.MM} | %{ ...[/CODE]
[CODE]group {$_.Aufnahmedatum.Substring(0,10)} [/CODE]
weglasse gibt es folgendenFehler bei Get-Date:
[CODE]group : Cannot bind parameter 'Date'. Cannot convert value "‎17.‎05.‎2015 ‏‎12:54" to

type
"System.DateTime". Error: "Die Zeichenfolge wurde nicht als gültiges DateTime

erkannt."
At C:\Test\DatumSortieren.ps1:82 char:88
+ ... nahmedatum" | group {Get-Date $_.Aufnahmedatum -format yyyy.MM} | %{
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidResult: (aaaaaa.JPG:PSObject) [Group-Object],

ParameterBindingE
xception
+ FullyQualifiedErrorId :

ExpressionEvaluation,Microsoft.PowerShell.Commands.GroupObjectCommand[/CODE]
hoffe jemand kann mir weiterhelfen
schon mal danke im Voraus
11.05.2016 08:47 von xyxy_yx
Hi xyxy_yx und herzlich Willkommen im Forum.

Mit PowerShell kann ich leider garnichts anfangen.

In Groovy sollte das nicht sehr kompliziert sein.
Man benötigt zunächst ein File-Objekt auf das sort-Verzeichnis.
Dann durchläuft man dieses File für File.(http://stackoverflow.com/questions/3953965/groovy-get-a-list-of-all-the-files-in-a-directory-recursive)
Pro File holt man sich dann das Erstellungsdatum und generiert daraus ein neues File-Objekt welches auf den Ordner zeigt.
Mit dem File-Objekt kann man prüfen ob der Ordner existiert, wenn nicht erstellt man ihn.
Anschließend verschiebt/kopiert man das File.
11.05.2016 10:16 von MartinW
Habe die Lösung schon gefunden. Hier nochmal der Code, falls ihn wer benötigt:
function Get-ScriptDirectory siehe oben
function Add-ExtendedFileProperties siehe oben

[CODE]$ordner = Get-ScriptDirectory
$fileordner = "$ordner\sort"
$Dateien = dir $fileordner -File | Add-ExtendedFileProperties -PropertyExtended "Aufnahmedatum"
foreach ( $Datei in $Dateien){
$datum=$Datei.Aufnahmedatum -replace '([^0-9.: ])',''

try{
$Verz=[DateTime]::ParseExact($datum,'dd.MM.yyyy HH:mm', [System.Globalization.CultureInfo]::InvariantCulture).ToString("yyyy.MM")
if (!(test-path "$ordner\$Verz")){md "$ordner\$Verz" -Force}
move-item $Datei.FullName -Destination "$ordner\$Verz" -EA Ignore
}
catch{}
} [/CODE]
11.05.2016 18:39 von xyxy_yx
Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

Über United Planet
© 2019 United Planet GmbH
Schnewlinstraße 2
79098 Freiburg