Batch IF-Bedingung in Verbindung mit FIND in einer FOR-Schleife

rybog

Newbie
Registriert
Apr. 2014
Beiträge
5
Hallo,

ich möchte eine IF-Bedingung in meiner FOR-Schleife einbauen.

Das unter vorgestellte Skript durchsucht einen Ordner nach bestimmten Dateien (*.prt.* *.asm.* *.drw.*) und erstellt eine MNU-Datei (siehe Besondere DIR-Ausgabe in eine TXT-Datei?).

Wenn neue Dateien im Ordner abgelegt werden, soll das Skript noch mal ausgeführt werden, um nur die neuen Dateinamen in die bereits vorhandene MNU-Datei aufzunehmen. Die vorhandene Dateinamen sollen übersprungen werden, deshalb diese IF-Bedingung.

Hat jemand eine Idee?

Code:
@echo off
cd /d %1
if not exist %~n1.mnu (
   echo %~n1> %~n1.mnu
   echo #>> %~n1.mnu
   echo #>> %~n1.mnu
)
for /f "tokens=1,2 delims=." %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.drw.*') do (
   if find /i "%%x.%%y" %~n1.mnu goto found   <--Diese Syntax ist natürlich falsch, zeigt aber mein Vorhaben.
   echo %%x.%%y>> %~n1.mnu
   echo #>> %~n1.mnu
   echo #>> %~n1.mnu
   :found
)

Gruß
 
Zuletzt bearbeitet:
Was genau wäre nun die Frage? Die Wiederholung der Abfrage? Dann kannst du am Ende ein GOTO START setzen und vor dem 1. if ein :START.

lg
fire
 
Ich möchte, dass das Skript ab der 9. Zeile überprüft, ob ein Dateiname im Ordner und in der MNU-Datei bereits vorhanden ist. Wenn ja, dann soll die Schleife ab der 8. Zeile wieder ausgeführt werden, bis alle Dateien im Ordner mit Dateinamen in der MNU-Datei verglichen sind. Wenn ein Dateinamen in der MNU-Datei nicht vorhanden ist, dann soll das Skript ab der 11. Zeile fortgeführt werden und den fehlenden Dateinamen in die MNU-Datei eintragen.

Die Syntax in der 9. Zeile ist falsch und funktioniert nicht. Sie soll nur verdeutlichen, was ich erreichen möchte.

Gruß
Ergänzung ()

Ich habe einen Ansatz gefunden. Ich überprüfe jedes mal, ob es eine gegebene Datei gibt.

Code:
@echo off
cd /d %1
if not exist %~n1.mnu (
   echo %~n1> %~n1.mnu
   echo #>> %~n1.mnu
   echo #>> %~n1.mnu
)
for /f "tokens=1,2 delims=." %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.drw.*') do (
   find /i "%%x.%%y" %~n1.mnu
   if %errorlevel%==1 (
      echo %%x.%%y>> %~n1.mnu
      echo #>> %~n1.mnu
      echo #>> %~n1.mnu
   )
)

Leider funktioniert die Anfrage "if %errorlevel%==1" nicht wie gewünscht. Das heißt, ich möchte wissen, ob "find" auch etwas gefunden hat.
In der Batch-Konsole dagegen funktioniert diese Abfrage wunderbar. Warum dieser Unterschied?
 
Zuletzt bearbeitet:
versuchs mit if not errorlevel == 0 .. also umgekehrt abfragen. Hab das früher in den Batch-Schleifen öfters so nutzen müssen, aber das klappte.
Außerdem müsstest mal Googlen, welche Errorlevel 'find' überhaupt wiedergeben kann.

lg
fire
 
Zurück
Oben