Andy123 10 Geschrieben 4. Juli 2012 Melden Teilen Geschrieben 4. Juli 2012 Hallo, da ich im Progi ein Anfänger bin, bräuchte ich Eure Hilfe. Ich habe folgendes Problem: ich habe eine folgende Ordnerstruktur: Jahr/Monat/Tag bsp.: 2012/Juli/03 und ich habe eine Menge von Bildern. Jetzt möchte ich das Erstelldatum der Bilder auslesen, den Monat rausfiltern und schauen ob der Ordner mit dem Monat vorhanden ist. Wenn ja, dann den Tag rauslesen und die Existenz von diesem Ordner überprüfen. Wenn die beiden Ordner vorhanden sind, dann soll diese Datei in diesen Ordner verschoben werden. Wenn diese Ordner nicht vorhanden sind, dann soll ein Ordner mit dem Monat und anschließend mit dem Tag erstellt werden. Ich würde als erstes Schleifen bauen um alle Bilder durchzugehen. Aber an diesem Punkt komme ich auch leider nicht weiter: for %%f in ("c:\bilder\*") do echo %%f: %%~tf Über eine Unterstützung würde ich mich sehr freuen! Vielen Dank im Vorraus! Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 4. Juli 2012 Melden Teilen Geschrieben 4. Juli 2012 Du willst das ganze in Powershell umsetzen. Zitieren Link zu diesem Kommentar
Andy123 10 Geschrieben 4. Juli 2012 Autor Melden Teilen Geschrieben 4. Juli 2012 in CMD ich habe jetzt alle Bilder eingelesen und will im nächsten Step den ErstellMonat rauslesen Da fehlen mir leider die Syntax-Kenntnisse. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 4. Juli 2012 Melden Teilen Geschrieben 4. Juli 2012 Hallo Andy, falls Du es wirklich per CMD machen willst, dann wirst Du dich wohl mit dem for-Befehl und dem set-Befehl befassen müssen. for /? und set /? oder in der Hilfe von Windows Da Du aber sowieso neu anfängst, befasse dich mit Powershell! Es ist eine gute Gelegenheit. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 4. Juli 2012 Melden Teilen Geschrieben 4. Juli 2012 Als "Progi-Anfänger" würde ich Dir allerdings dringend empfehlen, sich mit Powershell auseinanderzusetzen! CMD ist einfach nocht mehr das richtige Werkzeug für komplexere Aufgaben! Dukel hatte das vermutlich auch nicht als Frage gemeint ;-) Zitieren Link zu diesem Kommentar
Andy123 10 Geschrieben 4. Juli 2012 Autor Melden Teilen Geschrieben 4. Juli 2012 Vielen Dank für die Anworten Ich versuche zuerst mit cmd durchzukämpfen. Anbei ein Ausschnitt von zwei Methoden. Monat habe ich schon rausgekriegt..YUHUU, aber auch nicht ganz. Er gibt mir leider nur einen einzigen Monat aus. Ich vermute dass die For-schleife nur ein einziges Mal aufgerufen wird und dann direkt in die Methoe "ausgabeMonat" geht. Wenn ich aber aus dieser Methode auf die erste verweise "goto BILDEREINLESEN", dann wird er mir nur die Daten für das erste Bild ausgeben, was nicht den Sinn der Sache hat .. hat jemand ein Vorschlag wie ich das umgehen kann?! :BILDEREINLESEN ECHO Ihre Box ist auf dem Server vorhanden. echo. REM Methode zum Auslesen des Erstellmonats SET SOURCEPATH=E:\Quelle\100Nikon REM %SOURCEPATH% for %%f in ("E:\Quelle\100Nikon\*") do call :ausgabeMonat "%%~tf" echo. GOTO end :ausgabeMonat echo _____________ echo Erste Datei: %1 set "Monat=%~1" echo Monat: %Monat:~3,2% echo. GOTO end Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 4. Juli 2012 Melden Teilen Geschrieben 4. Juli 2012 Aus der Subroutine muss doch ein Rücksprung erfolgen zur Schleifenbearbeitung , falls ich mich richtig erinnere mit End Of File oder End Of Function(EOF). :BILDEREINLESEN for %%f in ("D:\Bilder\*") do call :ausgabeMonat "%%~tf" echo Ende der Programmausführung pause exit :ausgabeMonat echo ------------------------ echo Datei: %1 set "Monat=%~1" echo Monat: %Monat:~3,2% echo Ende einer Unterbearbeitung pause :EOF Zitieren Link zu diesem Kommentar
Andy123 10 Geschrieben 4. Juli 2012 Autor Melden Teilen Geschrieben 4. Juli 2012 Vielen Dank leff! Das funktioniert schon Mal :) aber auch nicht ganz, wenn ich auch alle "pause" rausnehme und eine vom Ende lasse, dann zeigt er mir erst Mal nur einen Eintrag. Damit die nächsten Einträge gezeigt werden, muss ich immer auf Enter klicken, was natürlich umständlich ist. Wieso macht er nach jedem Durchlauf der Schleifen eine Pause, obwohl ich dies rausgenommen habe? :BILDEREINLESEN for %%f in ("E:\Quelle\100Nikon\*") do call :ausgabeMonat "%%~tf" echo Ende der Programmausführung goto end :ausgabeMonat echo _____________ echo Datei: %1 set "Monat=%~1" set Monat=%Monat:~3,2% echo Monat: %Monat% :EOF :end ECHO Ende. Pause und noch eine Frage vom wahren Anfänger ;) Wie kann ich den "alten Pfad" den "\" und eine "Variable" zusammensetzen: set Pfad=%alterPfad% + \ + "variable" Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 4. Juli 2012 Melden Teilen Geschrieben 4. Juli 2012 Sorry, mein Fehler, es heisst: goto :EOF Die For-Schleife läuft bis zum Ende durch, hält nicht von allein zum Anzeigen des ersten Ausgabe, deshalb sieht man vorheriges oft nicht, deshalb das Pause eingefügt zum testen. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 4. Juli 2012 Melden Teilen Geschrieben 4. Juli 2012 Batch-Programmierung: Programmierungshilfen Zitieren Link zu diesem Kommentar
Andy123 10 Geschrieben 9. Juli 2012 Autor Melden Teilen Geschrieben 9. Juli 2012 Anbei der funktionierende Code: for %%f in ("%quellpfad%") do call :ausgabeMonat "%%~tf" "%%~dpnxf" - -> mit dem ersten Parameter übergebe ich das Erstelldatum und mit dem zweiten den vollständigen Pfad der Datei mit dem Dateinamen. GOTO :end So wird der Pfad mit dem Back-Slash zusammengesetzt: set pfadMitMonat=%pathfile%\%Monat% Bei älteren dos versionen gibt es Abweichungen, wie ich leider feststellen musste ... P.S. Übung macht den Meister ))) Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 9. Juli 2012 Melden Teilen Geschrieben 9. Juli 2012 Herzlichen Glückwunsch dazu :) Ich habe diese %%~tf" "%%~dpnxf nie verstanden, brauchte es allerdings auch nie. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.