Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mit DIR nach Bild aufgenommen am sortieren

Frage Entwicklung Batch & Shell

Mitglied: Haegar75

Haegar75 (Level 1) - Jetzt verbinden

26.09.2008, aktualisiert 18.10.2012, 7185 Aufrufe, 5 Kommentare

Hallo Leute,
ich hoffe ihr könnt mir helfen. Im Windows-Explorer kann man sich anzeigen lassen wann ein Bild aufgenommen wurde. Mit DIR kann man laut Beschreibung aber nur nach dem Datum der letzten Änderung sortieren was ja schon evtl durch kopieren bzw brennen verändert wird. Kann man die Windows-Funktion irgendwie in einer Batch nachbauen? Ich möchte Bilder anhand dieses Kriteriums sortieren und kopieren.. Welche andere Programmiersprache wäre dazu geeignet?
Mitglied: mgoelike
26.09.2008 um 20:21 Uhr
Hallo,

brauchst Du gar nicht. Im Windows-Explorer die Ansicht auf Details stellen. Anschließend per Rechtsklick auf Sortierleiste (wo Name usw. steht) klicken. Schon erscheint eine Liste mit zusätlich einblendbaren Informationen. Ganz unten auf Weitere klicken und schon kann man viele zusätzliche Informationen immer anzeigen lassen. Unter anderem sogar Bild aufgenommen an usw.

mfg
Bitte warten ..
Mitglied: Haegar75
26.09.2008, aktualisiert 18.10.2012
Ja, das ist mir schon klar dass das im Windows-Explorer geht. Wollte aber sowas machen http://www.administrator.de/forum/bilder-automatisch-sortieren-per-batc ...
und dafür die genaue Information der Bildaufnahme nutzen. Aber DIR war nun mal schon lange vor den Digitalkameras da..
Bitte warten ..
Mitglied: bastla
26.09.2008 um 22:53 Uhr
Hallo Haegar75!

Aber DIR war nun mal schon lange vor den Digitalkameras da..
... was sich aber durch ein wenig VBScript ausgleichen lassen sollte :
01.
@echo off & setlocal 
02.
 
03.
set "QuellDir=D:\Fotos\ungeordnet" 
04.
set "Typ=jpg" 
05.
set "ZielDirRoot=D:\Fotos\sortiert" 
06.
 
07.
set G=%temp%\GetDatePictureTaken.vbs 
08.
> %G% echo Set Fld=CreateObject("Shell.Application").Namespace(WScript.Arguments(0)) 
09.
>>%G% echo For Each F In Fld.Items: WScript.Echo """"^&F.Path^&""" " ^& Fld.GetDetailsOf(F,25):Next 
10.
 
11.
for /f "tokens=1-2" %%a in ('cscript //nologo %G% "%QuellDir%"^|findstr /i ".%Typ%"') do ( 
12.
    if not exist "%ZielDirRoot%\%%b" md "%ZielDirRoot%\%%b" 
13.
    echo move %%a "%ZielDirRoot%\%%b"	 
14.
)
Falls Du die Datumsschreibweise "JJJJ-MM-TT" bevorzugst, verwende folgende Zeile als Ersatz für die obige Zeile 9:
01.
>>%G% echo For Each F In Fld.Items: D=Fld.GetDetailsOf(F,25): WScript.Echo """"^&F.Path^&""" " ^& Mid(D,7,4)^&"-"^&Mid(D,4,2)^&"-"^&Left(D,2):Next
Ähnlich wie in dem von Dir verlinkten Beitrag wird auch in diesem Batch zur Vorsicht der Verschiebebefehl durch das vorangestellte "echo" entschärft (der Befehl wird nur angezeigt, aber nicht ausgeführt) - das Erstellen der Ordner im Zielpfad sollte aber eigentlich keine Probleme bewirken und erfolgt daher tatsächlich.

Das im Batch enthaltene VBScript setzt XP voraus - unter Vista habe ich nicht getestet, es könnte aber in der Zeile 8 der Wert 12 anstelle von 25 erforderlich sein (siehe Auflistung hier) ...

Grüße
bastla
Bitte warten ..
Mitglied: Haegar75
27.09.2008 um 11:52 Uhr
Hi!Danke! Funktionierte auf Anhieb!Das VBScript wird mir immer symphatischer!Ist ja der Hass was für Attribute es bei Vista alle gibt.
Wie kann ich die Zeile 11 ändern, dass evtl. auch Unterordner mit durchforstet werden?
Ich würde noch gerne optional die Dateien nach der "Stunde" sortiert in Verzeichnissen unterhalb des Tages ablegen. Evtl. mit MsgBox Typ 4 abfragen.. Hintergrund: Fotos von z.B Familienfesten die mit mehreren Kameras gemacht wurden in einen zeitlichen Verlauf zu bekommen. (das nutzt natürlich nix wenn so ein Hämpel das Datum nicht eingestellt hat an der Kamera.
Bitte warten ..
Mitglied: bastla
27.09.2008 um 12:38 Uhr
Hallo Haegar75!

Wie kann ich die Zeile 11 ändern, dass evtl. auch Unterordner mit durchforstet werden?
Das Einfachste wäre es, eine "for"-Schleife "herumzuwickeln" - etwa:
01.
for /f "delims=" %%i in ('dir /s /b /ad "%QuellDir%"') do ( 
02.
    for /f "tokens=1-2" %%a in ('cscript //nologo %G% "%%i"^|findstr /i ".%Typ%"') do ( 
03.
        if not exist "%ZielDirRoot%\%%b" md "%ZielDirRoot%\%%b" 
04.
        echo move %%a "%ZielDirRoot%\%%b" 
05.
06.
)
Ich würde noch gerne optional die Dateien nach der "Stunde" sortiert in Verzeichnissen unterhalb des Tages ablegen.
Dazu muss die Rückgabe des VBScripts etwas angepasst werden - die Zeile 9 müüste dann etwa so ausssehen:
01.
>>%G% echo For Each F In Fld.Items: WScript.Echo """"^&F.Path^&""" " ^& Replace(Fld.GetDetailsOf(F,25),":"," "):Next
Wenn Du die andere Datumsschreibweise bevorzugst (ist mir schon wegen der besseren Sortierbarkeit sympathischer), dann so:
01.
>>%G% echo For Each F In Fld.Items: D=Fld.GetDetailsOf(F,25): WScript.Echo """"^&F.Path^&""" " ^&Mid(D,7,4)^&"-"^&Mid(D,4,2)^&"-"^&Left(D,2)^&Replace(Mid(D,11),":"," "):Next
In beiden Fällen ist die "for"-Schleife auch noch anzupassen, damit die Stunde als %%c und die Minute als %%d verwendet werden können:
01.
for /f "tokens=1-4" %%a in ('cscript //nologo %G% "%QuellDir%"^|findstr /i ".%Typ%"') do (
In der Version mit Berücksichtigung der Unterordner wäre dann auch noch (wie oben gezeigt) "%QuellDir%" durch "%%i" zu ersetzen.

Bei Unterteilung auch nach Stunden wäre das Ziel (für "md" und "move") jeweils
01.
"%ZielDirRoot%\%%b\%%c"
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(10)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Heiß diskutierte Inhalte
Windows 10
Windows für Privatanwender "nicht mehr handhabbar" (26)

Frage von FA-jka zum Thema Windows 10 ...

LAN, WAN, Wireless
Brauche Hilfe: Mit (schnellem) WLAN Strecke überbrücken (23)

Frage von pierrehansen zum Thema LAN, WAN, Wireless ...

Basic
Programmierung von Windows Programmen (10)

Frage von Ghost108 zum Thema Basic ...