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

Automatisiertes -verteilen- von Dateien in Ordnern anhand von Dateiinfos

Frage Microsoft Windows Tools

Mitglied: Xenesis

Xenesis (Level 1) - Jetzt verbinden

03.03.2008, aktualisiert 07.03.2008, 9611 Aufrufe, 8 Kommentare

evtl. mit Batch-Skript

Hallo an alle,

ich bin während einiger Programmierprobleme immer mal wieder über diese Seite gestolpert, die mir auch schon einige male weiterhelfen konnte.

Jetzt hab ich aber ein Problem, was weder hier noch irgendwo sonst (für mich auffindbar ^^) gelöst wird.

Und zwar habe ich, wenn ich Bilddateien direkt von meiner Digitalkamera runterlade, alle Dateien in einem Ordner. Diese hätte ich gerne verteilt auf Unterordner, die das Datum des Aufnahmetages tragen (JJJJ/MM/DD) (evtl. auch noch unterteilt in Monate...das wäre aber ein Zusatz).

Ich weiß durchaus, dass es Programme gibt, die die Bilder von der Digitalkamera direkt in eine solche Ordnerstruktur bringen. Oft werden sie dabei aber mindestens umbenannt, und es finden sich weitere Ordner/Dateien, mit Miniaturansichten etc. die ich löschen müsste.

Das größte Problem daran ist aber, dass Dateien, die man bereits auf dem Rechner hat (weil man sie einfach von der Kamera direkt rüberkopiert hat) und jetzt in eines dieser Programme legt, nicht in eine passende Ordnerstruktur verschoben werden (was natürlich meistens gewünscht ist, aber es findet sich kein Programm, bei dem man sowas umstellen könnte)
Und da ich jetzt für einige Zeit mit der Kamera unterwegs sein werde (ohne eigenen Laptop) und ich die Bilder immer nur in InternetCafes von der Kamera auf ein externes Speichermedium laden werde hätte ich gerne ein Programm/Script, welches mir nach Rückkehr die Einteilung erleichtert/abnimmt.

Und zwar hatte ich mir das so vorgestellt, dass das Script aus allen Dateien in einem angegebenen Ordner das Aufnahmedatum aus den Dateiinfos liest, und sie entsprechend auf vorhanden Ordner verteilt bzw. neue Ordner erstellt.
Das Problem für mich ist jetzt nur, wie ich an den Wert aus den Dateiinfos rankomme?!
Es scheint dafür zwar Visual Basic Möglichkeiten zu geben, aber davon habe ich überhaupt keine Ahnung, wäre also über jede Hilfe äußerst dankbar.

Bei einem Batch-Script wäre es natürlich vorteilhaft, wenn man das Script einfach in den Ordner legt, in dem die Dateien liegen und dieses Script ausführt.

Ich würde mich über jede Hilfe freuen und stehe selbstverständlich auch für Rückfragen bzw. Programmtips zur Verfügung.

Im vorraus schon einmal Danke!!
Mitglied: bastla
03.03.2008 um 22:34 Uhr
Hallo Xenesis und willkommen im Forum!

Falls es nur darum ginge, die Bilder nach dem Speicherdatum auf Ordner zu verteilen, könntest Du es mit folgendem Batch versuchen:
01.
@echo off & setlocal 
02.
set "Ziel=D:\Bildarchiv" 
03.
 
04.
if "%~1" neq "" pushd %1 
05.
for %%i in (*.jpg) do ( 
06.
	for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do ( 
07.
		if not exist "%Ziel%\%%c-%%b-%%a" md "%Ziel%\%%c-%%b-%%a" 
08.
		move %%i "%Ziel%\%%c-%%b-%%a\" 
09.
10.
11.
if "%~1" neq "" popd
Verwendet werden kann der Batch entweder, indem er im Ordner mit den zu verteilenden Bildern abgelegt und von dort aufgerufen wird, oder, indem der Ordner mit den Bildern auf die Batchdatei gezogen wird (Drag & Drop).

Anzupassen ist natürlich vorweg der Zielordner - in diesem werden die einzelnen "Tagesordner" (im Format "JJJJ-MM-TT") erstellt.

Grüße
bastla
Bitte warten ..
Mitglied: Xenesis
04.03.2008 um 09:32 Uhr
Hey danke für die schnelle Antwort,

ich muss zugeben, dass ich von dem Script allerdings kaum was verstehe ^^ (Ordnerangaben und move natürlich, aber die Begriffe in den Schleifen werde ich gleich mal nachschlagen ;))

das ist auf jeden fall schon mal mehr als ich zustande bringen konnte, aber eine Frage hab ich noch:
verteilt das script die Dateine nach dem Speicherdatum auf dem Rechner, oder nach dem Speicherdatum auf der Kamera(=Aufnahmedatum)?
Bei den Dateien der Kamera ist nämlich in den Dateiinfos ein spezieller Punkt "Aufnahmedatum", nach dem man bei Windows auch sortieren kann. Es wär eben absolut klasse, wenn die verteilung auf Basis dieser Info erfolgen könnte.
Das Speicherdatum wäre nämlich auch bei Dateien von verschiedenen Tagen (die aber zur gleichen Zeit auf den PC übertragen werden) gleich.
(Da ich lange Zeit Bilder nur auf der SD karte haben werde und nur alle paar Tage an einen Rechner komme, würden halt viele Bilder verschiedener Tage mit dem gleichen Speicherdatum erstellt werden.

Wenn du das noch umbauen könntest oder mir eine Hilfe geben könntest, wie man das einbaut, dann wär ich dir sehr dankbar.

Mfg
Bitte warten ..
Mitglied: bastla
04.03.2008 um 18:04 Uhr
Hallo Xenesis!

verteilt das script die Dateine nach dem Speicherdatum auf dem Rechner, oder nach dem Speicherdatum auf der Kamera(=Aufnahmedatum)?
Sollte letzteres sein (= Änderungsdatum), nicht das Erstellungsdatum (= erstes Speichern am Rechner).

Um aber sicher zu gehen und tatsächlich das im Explorer angezeigte Datum von "Bild aufgenommen am" zu verwenden, muss ein wenig VBS eingebunden werden - dann könnte das so aussehen:
01.
@echo off & setlocal 
02.
set "Ziel=D:\Bildarchiv" 
03.
 
04.
set "Quelle=%~f1" 
05.
if "%Quelle%"=="" set "Quelle=%~dp0" 
06.
set Delim=$ 
07.
 
08.
set G=%temp%\GetDatePicTaken.vbs 
09.
echo Set Fld=CreateObject("Shell.Application").Namespace(WScript.Arguments(0))>%G% 
10.
echo For Each F In Fld.Items:WScript.Echo F^&"%Delim%"^&Left(Fld.GetDetailsOf(F,25),10):Next>>%G% 
11.
 
12.
for /f "tokens=1-2 delims=%Delim%" %%i in ('cscript //nologo %G% "%Quelle%"') do ( 
13.
	if "%%j" neq "" ( 
14.
		for /f "tokens=1-3 delims=. " %%a in ("%%j") do ( 
15.
			if not exist "%Ziel%\%%c-%%b-%%a" md "%Ziel%\%%c-%%b-%%a" 
16.
			move "%Quelle%\%%i" "%Ziel%\%%c-%%b-%%a\" 
17.
18.
19.
)
Auch hier gilt: Ordner als Argument (am einfachsten per Drag & Drop, aber auch per Kommandozeilenaufruf möglich) an den Batch übergeben oder Batchdatei im Bildordner platzieren und von dort starten.

Verschoben werden durch diesen Batch nur (Bild-)Dateien mit einem "Aufnahmedatum" (daher also zB die Batchdatei selbst nicht).

Das (temporäre) VBScript ist übrigens eine angepasste Version des in diesem Artikel beschriebenen Scripts zum Auslesen der "erweiterten Dateieigenschaften".

Falls Du die "for"-Schleifen noch nicht entziffert hast:

Die (neue) erste Schleife ruft das VBScript mit Übergabe des zu bearbeitenden Ordners auf und erhält für jede Datei als Ergebnis "Dateiname$Aufnahmedatum", wobei das Aufnahmedatum das Format "TT.MM.JJJJ" aufweisen sollte. Anmerkung: Das Trennzeichen "$" darf im Dateinamen selbst nicht vorkommen - sollte das doch der Fall sein, kann in der Zeile "set Delim=$" ein anderes Zeichen eingetragen werden - um Problemen vorzubeugen, sollte dies mit einem Editor erfolgen, welcher ASCII (nicht ANSI, wie zB der Windows-Editor) als Codierung verwendet.

Das Ergebnis wird in die beiden Teile ("token") %%i und %%j zerlegt. Nur falls %%j nicht leer ist (also ein Aufnahmedatum ausgelesen werden konnte), wird die Datei bearbeitet, und dazu mit der zweiten Schleife anhand des Trennzeichens "." das Datum in die Bestandteile %%a (=TT), %%b (=MM) und %%c (=JJJJ) zerlegt.

Mit dem Rest kommst Du sicher alleine klar ...

Abschließend noch eine Einschränkung: Gestestet auf XP Pro, so vermutlich nicht unter Vista lauffähig (jedenfalls nicht mit "25" im Script, vielleicht mit "12" - siehe Liste hier ) ...

Grüße
bastla
Bitte warten ..
Mitglied: Xenesis
04.03.2008 um 20:09 Uhr
hm...bei mir klappt das leider noch nicht. ich hab das Script jetzt unter mehreren Editoren (z.B. SmartEdit) als .bat datei abgespeichert.
Aber immer, wenn ich den Ordner auf die Datei ziehe bzw.sie im entsprechenden Ordner ausführe, öffnet sich nur kurz ein Konsolenfenster (und schließt sich), aber es werden keine Dateien verschoben .

Ich benutze WinXP Home....dürfte also laut der Tabelle nicht anders sein (=25).
Die Dateien sind in "normalem" Format: z.B. CIMG0003.JPG (also ohne irgendwelche besonderen Sonderzeichen)
Es ist jetzt so, dass das Aufnahmedatum im Format z.b. "01.03.2008 15:49" gespeichert ist...aber soweit ich das script verstehe nimmst du ja mit "Left(Fld.GetDetailsOf(F,25),10)" nur die ersten 10 zeichen oder?!

aber ansonsten machen mir diese beiden zeilen am meisten zu schaffen ^^(vor allem die obere Zeile)
01.
echo Set Fld=CreateObject("Shell.Application").Namespace(WScript.Arguments(0))>%G% 
02.
echo For Each F In Fld.Items:WScript.Echo F^&"%Delim%"^&Left(Fld.GetDetailsOf(F,25),10):Next>>%G%
Soweit ich das verstehe, wird in der zweiten Zeile eben der Ausdruck (Dateiname$Aufnahmedatum" erstellt (für jede Datei) was allerdings "Fld.Items:WScript.Echo" bzw. ":Next>>%G%" genau machen verstehe ich nicht, kann also leider nicht selber den Fehler finden

Irgendeine Idee, woran das liegen könnte, dass das bei mir nicht funktioniert?

MfG
Bitte warten ..
Mitglied: bastla
04.03.2008 um 21:46 Uhr
Hallo Xenesis!

Vorweg zur Erklärung des VBScripts - das könnte auch so aussehen:
01.
Set Fld = CreateObject("Shell.Application").Namespace(WScript.Arguments(0)) 
02.
For Each F In Fld.Items 
03.
    WScript.Echo F & "%Delim%" & Left(Fld.GetDetailsOf(F,25),10) 
04.
Next
Zeile 1 erzeugt das Objekt "Fld" (Folder) aufgrund des beim Aufruf übernommenen Arguments (nullbasiert, daher Index 0 = erstes Argument).

Danach folgt eine Schleife über alle Items von "Fld" (= über alle Dateien des Ordners) , wobei das jeweils betrachtete Item über die Objektvariable "F" (File) angesprochen wird.

"WScript.Echo" sorgt für eine Ausgabe (bei Aufruf des Scripts über "cscript.exe" über StdOut, bei Verwendung von "wscript.exe" als MsgBox) des Dateinamens, des Trennzeichens und der ersten 10 Stellen (= nur Datumsanteil) des Aufnahmedatums (soferne verfügbar, ansonsten wird ein Leerstring ausgegeben).

"Next" zeigt das Schleifenende an.

VBS wird (wie alle anderen VB-Varianten) zeilenweise interpretiert / compiliert, allerdings lassen sich durch Verwendung von ":" als Trennzeichen auch mehrere "Zeilen" zusammenfassen, was ich eben genutzt habe, um das Ganze auf nur 2 Zeilen zu komprimieren.
Zum Testen solltest Du eine Commandshell öffnen ("Start / Ausführen... / cmd") und den Batch von dort aus starten - mit
01.
cd /d "D:\Dein Bilderordner"
kannst Du zB vorher in den Ordner "D:\Bilder" wechseln, oder Du gibst den Ordner beim Aufruf des Batches als Argument an - Beispiel: Wenn Du den Batch etwa als "MovePics.bat" gespeichert hast, lautet die Befehlszeile
01.
MovePics "D:\Dein Bilderordner"
Damit Du mehr vom Ablauf erkennen kannst, ändere das "echo off" auf ein "echo on" - so wird jeder Befehl vor der Ausführung erst einmal angezeigt, und Du kannst nachvollziehen, ob zB tatsächlich die erwarteten Daten vom VBScript geliefert werden, etc.

Wenn Du beim Aufruf des Batches noch eine Umleitung der Ausgabe vornimmst, etwa
01.
MovePics "D:\Dein Bilderordner" > Log.txt
kannst Du die Bildschirmausgabe in der Datei "Log.txt" speichern.

Solltest Du selbst nicht daraus schlau werden, kannst Du natürlich gern den relevanten Teil (den ersten Schleifendurchlauf) posten.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
04.03.2008 um 22:32 Uhr
@bastla

...kannst Du natürlich gern den relevanten Teil (den ersten Schleifendurchlauf) posten.
Ich habe sicherheitshalber schon mal 532 Zentimeter Platz unterhalb meines Kommentars vorgesehen...
Weil es ja manchmal ausufert...

Ist Euch übrigens schon aufgefallen, dass M$ diese Extended File Attributes noch nie so richtig gepusht hat und noch nie als den Hit überhaupt auf den Titelseiten der Hochglanzprospekte zu platzieren versucht hat??

Wenn ich die (dort unkommentierte) Attribut-Mapping-Arie für W2000, XP und Vi$ta in dem KiX-Schnipsel lese, kann ich gar nicht so schnell essen, wie ich ### möchte.

Grüße
Biber
[Edit] Ach was, ich poste das mal.. vielleicht finden es andere auch aussagekräftig..

01.
;Attribute tables  
02.
;  
03.
;Windows XP  
04.
;Windows Server 2003    Windows 2000          ;Windows Vista  
05.
;-------------------------------------------  ;------------------------------------------- 
06.
;0 Name                 Name                  ;  0 Name  
07.
;1 Size                 Size                  ;  1 Size  
08.
;2 Type                 Type                  ;  2 Type  
09.
;3 Date Modified        Date Modified         ;  3 Date modified  
10.
;4 Date Created         Attributes            ;  4 Date created  
11.
;5 Date Accessed        Comment               ;  5 Date accessed  
12.
;6 Attributes           Date Created          ;  6 Attributes  
13.
;7 Status               Date Accessed         ;  7 Offline status  
14.
;8 Owner                Owner                 ;  8 Offline availability  
15.
;9 Author               ???                   ;  9 Perceived type  
16.
;10 Title               Author                ; 10 Owner  
17.
;11 Subject             Title                 ; 11 Kinds  
18.
;12 Category            Subject               ; 12 Date taken  
19.
;13 Pages               Category              ; 13 Artists  
20.
;14 Comments            Pages                 ; 14 Album  
21.
;15 Copyright           Copyright             ; 15 Year  
22.
;16 Artist              Company Name          ; 16 Genre  
23.
;17 Album Title         Module Desription     ; 17 Conductors  
24.
;18 Year                Module Version        ; 18 Tags  
25.
;19 Track Number        Product Name          ; 19 Rating  
26.
;20 Genre               Product Version       ; 20 Authors  
27.
;21 Duration            Sender Name           ; 21 Title  
28.
;22 Bit Rate            Recipient Name        ; 22 Subject  
29.
;23 Protected           Recipient Number      ; 23 Categories  
30.
;24 Camera Model        Csid                  ; 24 Comments  
31.
;25 Date Picture Taken  Tsid                  ; 25 Copyright  
32.
;26 Dimensions          Transmission Time     ; 26 #  
33.
;27 ???                 Caller Id             ; 27 Length  
34.
;28 ???                 Routing               ; 28 Bit rate  
35.
;29 Episode Name        Audio Format          ; 29 Protected  
36.
;30 Program Description Sample Rate           ; 30 Camera model  
37.
;31 Description         Audio Sample Size     ; 31 Dimensions  
38.
;32 Audio sample size   Channels              ; 32 Camera maker  
39.
;33 Audio sample rate   Play Length           ; 33 Company  
40.
;34 Channels            Frame Count           ; 34 File description  
41.
;35 Company             Frame Rate            ; 35 Program name  
42.
;36 Description         Video Sample Size     ; 36 Duration  
43.
;37 File Version        Video Compression     ; 37 Is online  
44.
;38 Product Name        ???                   ; 38 Is recurring  
45.
;39 Product Version     ???                   ; 39 Location  
46.
;40 Keywords (XP only)  ???                   ; 40 Optional attendee addresses  
47.
;                                             ; 41 Optional attendees  
48.
                                              ; 42 Organizer address  
49.
                                              ; 43 Organizer name  
50.
                                              ; 44 Reminder time  
51.
                                              ; 45 Required attendee addresses  
52.
                                              ; 46 Required attendees  
53.
                                              ; 47 Resources  
54.
                                              ; 48 Free/busy status  
55.
                                              ; 49 Total size  
56.
                                              ; 50 Account name  
57.
                                              ; 51 Computer  
58.
                                              ; 52 Anniversary  
59.
                                              ; 53 Assistant's name  
60.
                                              .... 
61.
                                              ;261 Directors  
62.
                                              ;262 Data rate  
63.
                                              ;263 Frame height  
64.
                                              ;264 Frame rate  
65.
                                              ;265 Frame width  
66.
                                              ;266 Total bitrate 

[/Edit]
Bitte warten ..
Mitglied: bastla
04.03.2008 um 22:53 Uhr
@Biber

Mein unmittelbarster Bezug zu den "Extended File Attributes" ist, dass sie mich im Explorer grundsätzlich stören und ich sie in viel zu vielen Ordnern aus der Detailansicht eliminieren muss ...
@Xenesis

In diesem Zusammenhang: Unterscheiden sich eigentlich die Datumswerte zwischen Datei(änderungs)datum und Aufnahmedatum bei Deiner Kamera?

Grüße
bastla

[Edit] Jetzt bleiben nur noch 506 cm ... [/Edit]
Bitte warten ..
Mitglied: Xenesis
07.03.2008 um 20:14 Uhr
Hallo,

tut mir leid, dass ich erst jetzt dazu komme, mich wieder zu melden.

Ich hab das ganze jetzt mal mit @echo on und "> log.txt" laufen lassen.

Meiner Meinung nach die entscheidende Ausgabe: "CScript-Fehler: Der Zugriff auf Windows Script Host wurde fr diesem Computer deaktiviert. Wenden Sie sich an Ihren Administrator, um weitere Details in Erfahrung zu bringen."

Gut, jetzt bin ich ja der Administrator Ich hab mich dann mal an mich gewandt und gemerkt, dass mein Administrator keinen Schimmer von dem hat, was hier abgeht ;)

Bisher hab ich durch suchen nur ne Möglichkeit gefunden diesen Fehler durch verändern der Registry zu beheben.....nur würde ich das ungerne machen, wenn es sich auch anders beheben ließe.

hoffe, dass ihr mir hier weiterhelfen könnt

Mfg


EDIT: Paranoia rächt sich
durch XP-Anti Spy wurde der Windows Script Host deaktiviert.....hab den wieder zurückgestellt und jetzt funktioniert alles!!!
Herzlichen Dank an dich Bastla! Du hast mir die Arbeit mit meinen Bildern ein ganzes Stück einfacher gemacht *thumbsup*
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell: Dateien nach Version löschen in mehreren Ordnern (4)

Frage von ImmerKind zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien mit vorgegebener Größe erstellbar? (3)

Frage von Stefan007 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...