TiKa Geschrieben 26. April 2011 Geschrieben 26. April 2011 Hallo, vielleicht kann mir Jemand weiterhelfen, Ich bin schon seit einigen Tagen am suchen und rumprobieren. Ich möchte in einer Batch-Datei einen Ordner überprüfen lassen, ob in diesem Dateien vorhanden sind oder nicht. Wenn keine Dateien vorhanden sind, soll der Ordner gelöscht und das Programm beendet werden. Wenn Dateien vorhanden sind, soll das Programm weiter ausgeführt werden. @echo set jahr=%date:~-4% set monat=%date:~-7,2% set tag=%date:~-10,2% set stunde=%time:~0,2% set minute=%time:~3,2% set sekunde=%time:~6,2% xcopy \\netapp01\%jahr%.%monat%.%tag%\*.* c:\%jahr%.%monat%.%tag%\*.* /S /E /C /H /R /Y /V if not exist "C:\%jahr%.%monat%.%tag%\*.*" (goto delete) :delete rmdir C:\%jahr%.%monat%.%tag% /s /q goto ende if exist "C:\%jahr%.%monat%.%tag%" (goto weiter) :weiter ... ... Nach meinen Tests denke ich, dass das Problem if not exist "C:\%jahr%.%monat%.%tag%\*.*" (goto delete) daran liegt, entweder ist die If-Anweisung falsch, oder die Prüfung, ob Dateien im Ordner vorhanden sind oder nicht. Liegt es an "*.*", gabt es da eventuell andere Zeichen oder ist mein Code komplett falsch?? Über eure Hilfe und Beiträge würde ich mich sehr freuen, LG TiKa Zitieren
User-Root Geschrieben 26. April 2011 Geschrieben 26. April 2011 hmtja... also ich glaube da stimmt was mit der Reihenfolge nicht: If XYZ goto Delete und danach direkt die Delete-Klausel? Da kannst du dir den goto-Befehl komplett verkneifen. Der wird nämlich ausgeführt ob das if nun besteht oder nicht. Ohne jetzt den Rest kontrolliert zu haben würde ich das eher so schreiben: if not exist "C:\%jahr%.%monat%.%tag%\*.*" goto delete if exist "C:\%jahr%.%monat%.%tag%" goto weiter goto ende :delete rmdir C:\%jahr%.%monat%.%tag% /s /q goto ende :weiter ... ... :ende exit Das sollte der Lösung schon näher kommen. Immer dran denken: Wenn eine Zeile abgehandelt wurde, kommt immer die danach folgende. Also einen If-Goto sollte immer ein anderer Pasus folgen als das ziel des Goto-Befehls, weil sonst das If überflüssig ist... Ich hab jetzt nen Knoten im Hirn :floet: Zitieren
TiKa Geschrieben 28. April 2011 Autor Geschrieben 28. April 2011 Oooooookey, vielen Dank erst mal, stimmt, da hätte ich mir Goto verkneifen können. Ich habe folgenden Code gefunden und ausprobiert, und es funktioniert einwandfrei! if exist "c:\%jahr%.%monat%.%tag%" dir /b /A:-d "c:\%jahr%.%monat%.%tag%">nul 2>nul || (goto delete) if exist "c:\%jahr%.%monat%.%tag%" dir /b /A:-d "c:\%jahr%.%monat%.%tag%">nul 2>nul && (goto weiter) Dass es funktioniert ist echt super, nur verstehe ich die Vorgehensweiße dieser Zeilen nicht ganz, was das Programm genau mit den größer/kleiner Zeichen macht und welche Rolle Nul dabei spielt. Und ich finde es immer noch komisch, dass es damit \*.* nicht funktioniert hat... :-( Hat vielleicht Jemand eine Erklärung dafür?? LG's TiKa Zitieren
User-Root Geschrieben 28. April 2011 Geschrieben 28. April 2011 das >nul und 2>nul sorgt nur dafür das die Ausgabe und die Fehlerausgabe von "dir /b..." nicht auf der Konsole ausgegeben wird. die || sind für die Bedingte Befehlsverkettung. Wird also nur ausgeführt wenn der erste Befehl fehlschlug. Bei && wird der zweite nur ausgeführt, wenn der erste auch ausgeführt werden konnte. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.