Script: Dateien kopieren, Benamung anhand von Attributen
Hallo,
Windows10 liefert von Zeit zu Zeit sehr schöne Lock-Screen-Wallpapers aus. Diese werden hier abgelegt, ohne Dateiendung.
Den ein oder anderen Wallpaper würde ich mir gerne abspeichern. Dazu soll der gesamte Inhalt aus dem oben genannten Pfad kopiert und unter "C:\temp" abgelegt werden. Da der Dateiname recht kryptisch ist (7e31cda0a286ebaaf06e2296b45da769117d445699d3e2b4fac6aa818b4d99b0), möchte ich während des Copyjobs (oder danach) die Dateien wie folgt benennen (die Dateidetails sind nach hinzufügen der Endung ".jpg" auslesbar).
Attribute: [DATE TAKEN] TITLE (DIMENSIONS)
Gewünschtes Ergebnis: [2013-12-08] The Quarry (1080 x 1920)
Abschließend sollen alle Bilder, die nicht der HD-Auflösung entsprechen, gelöscht werden.
Wer hat einen Lösungsansatz?
Windows10 liefert von Zeit zu Zeit sehr schöne Lock-Screen-Wallpapers aus. Diese werden hier abgelegt, ohne Dateiendung.
C:\Users\%USERNAME%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\
Den ein oder anderen Wallpaper würde ich mir gerne abspeichern. Dazu soll der gesamte Inhalt aus dem oben genannten Pfad kopiert und unter "C:\temp" abgelegt werden. Da der Dateiname recht kryptisch ist (7e31cda0a286ebaaf06e2296b45da769117d445699d3e2b4fac6aa818b4d99b0), möchte ich während des Copyjobs (oder danach) die Dateien wie folgt benennen (die Dateidetails sind nach hinzufügen der Endung ".jpg" auslesbar).
Attribute: [DATE TAKEN] TITLE (DIMENSIONS)
Gewünschtes Ergebnis: [2013-12-08] The Quarry (1080 x 1920)
Abschließend sollen alle Bilder, die nicht der HD-Auflösung entsprechen, gelöscht werden.
Wer hat einen Lösungsansatz?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 310234
Url: https://administrator.de/forum/script-dateien-kopieren-benamung-anhand-von-attributen-310234.html
Ausgedruckt am: 23.12.2024 um 18:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo @reflexx,
mit Powershell z.B. so:
(Wenn ein Titel nicht vorhanden ist, nimmt das Skript als Titel die zufällige ID des Namens. Das Aufnahmedatum ist eine schlechte Wahl ich habe hier z.B. ein System dort ist das Aufnahmedatum nur bei 1 Datei vorhanden, bei den anderen nicht, deswegen habe ich mal der Einfachheit das Änderungsdatum der Datei genommen).
Zielpfad und die sprachlichen Unterschiede der Eigenschaften (Englisch/Deutsch) kannst du oben in den Variablen anpassen, im Moment ist es an ein deutsches System angepasst.
Grüße Uwe
mit Powershell z.B. so:
(Wenn ein Titel nicht vorhanden ist, nimmt das Skript als Titel die zufällige ID des Namens. Das Aufnahmedatum ist eine schlechte Wahl ich habe hier z.B. ein System dort ist das Aufnahmedatum nur bei 1 Datei vorhanden, bei den anderen nicht, deswegen habe ich mal der Einfachheit das Änderungsdatum der Datei genommen).
Zielpfad und die sprachlichen Unterschiede der Eigenschaften (Englisch/Deutsch) kannst du oben in den Variablen anpassen, im Moment ist es an ein deutsches System angepasst.
# Zielpfad der Bilder
$targetpath = 'C:\temp'
# Eigenschaften je nach Sprache anpassen, Englisch: 'Title' und 'Dimensions'
$title = 'Titel'
$size = 'Abmessungen'
# -----------------------------------
# Funktion liest erweiterete Dateieigenschaften aus
function Add-ExtendedFileProperties{
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
}
}
# Funktion ersetzt ungültige Zeichen für Dateinamen
function Replace-IllegalPathChars([parameter(ValueFromPipeline=$true)]$string,$replaceString=''){
return ($string -replace '^com[1-9]|^lpt[1-9]|^con|^nul|^prn|[\\/:?<>|"*]',$replaceString)
}
# kopieren, filtern und umbenennen
gci "$env:LOCALAPPDATA\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets" -File | copy-item -Destination {"$env:TEMP\$($_.Name).jpg"} -Force -PassThru | Add-ExtendedFileProperties -PropertyExtended "$size","$title" | ?{$_."$size" -match '1080 x 1920|1920 x 1080'} | Rename-Item -NewName {("$($_.LastWriteTime.Date.toString('yyyy-MM-dd'))_$(if($_."$title" -ne ''){$_."$title"}else{$_.Basename})_($($_."$size"))_$([System.IO.Path]::GetRandomFileName()).jpg" | Replace-IllegalPathChars)} -PassThru | move-item -Destination $targetpath -Force