BATCH: Finde Textstring - wenn ja, mache das und das

#1
Guten Morgen!
Ich stehe gerade bei einem batch problem an und hoffe, einer von euch kann mir weiterhelfen:

Eine textdatei soll nach dem Wort "FEHLER" durchsucht werden - wenn dieser String vorhanden ist, soll er die datei kopieren, wenn nicht, soll er nichts machen...

Ich kann zwar nach dem Wort suchen, ich kann auch kopieren, aber beim IF statement scheitere ich... Benötige ich fürs IF statement eine variable und wenn die TRUE ist, dann kopiere...

%
CODE:

Find /i "FEHLER" Update_AV_log.txt
copy F:\Update_AV_log.txt "C:\Dokumente und Einstellungen\Plancad-SK\Desktop\Update_AV_log_copy.txt"
REN "C:\Dokumente und Einstellungen\Plancad-SK\Desktop\Update_AV_log_copy.txt" AV_%date%.txt

%

Ich hoffe, es kann mir wer weiterhelfen - mir als batch rookie :)

lg
Stefan
 

deepthroat

Erfahrenes Mitglied
#2
Hi.
Guten Morgen!
Ich stehe gerade bei einem batch problem an und hoffe, einer von euch kann mir weiterhelfen:

Eine textdatei soll nach dem Wort "FEHLER" durchsucht werden - wenn dieser String vorhanden ist, soll er die datei kopieren, wenn nicht, soll er nichts machen...

Ich kann zwar nach dem Wort suchen, ich kann auch kopieren, aber beim IF statement scheitere ich... Benötige ich fürs IF statement eine variable und wenn die TRUE ist, dann kopiere...

%
CODE:

Find /i "FEHLER" Update_AV_log.txt
copy F:\Update_AV_log.txt "C:\Dokumente und Einstellungen\Plancad-SK\Desktop\Update_AV_log_copy.txt"
REN "C:\Dokumente und Einstellungen\Plancad-SK\Desktop\Update_AV_log_copy.txt" AV_%date%.txt

%
Probier's mal so:
Code:
Find /i "FEHLER" Update_AV_log.txt
if errorlevel 1 goto notfound
copy F:\Update_AV_log.txt "C:\Dokumente und Einstellungen\Plancad-SK\Desktop\Update_AV_log_copy.txt"
REN "C:\Dokumente und Einstellungen\Plancad-SK\Desktop\Update_AV_log_copy.txt" AV_%date%.txt
:notfound
Gruß
 
#4
EDIT: Hab mal wieder zu lange gebraucht mit tippen ;) deepthroat war schneller.

Hallo Kaasi,

Wie du schon richtig bemerkt hast, brauchst du eine IF Abfrage. Die Variable die du suchst nennt sich errorlevel. Immer wenn ein Programm ausgeführt wurde, wird der Variablen errorlevel eine Zahl zugewiesen.

Findest du mit find /i "Fehler" datei.txt z.B. etwas, so ist der errorlevel danach 0 (alles hat geklappt). Findest du jedoch nichts, so ist der errorlevel 1.

Das ganze sieht dann so aus.
Code:
find /i "FEHLER" Update_AV_log.txt
IF errorlevel 1 (
   echo Kein FEHLER gefunden.
) ELSE (
   copy F:\Update_AV_log.txt "C:\Dokumente und Einstellungen\Plancad-SK\Desktop\Update_AV_log_copy.txt"
   REN "C:\Dokumente und Einstellungen\Plancad-SK\Desktop\Update_AV_log_copy.txt" AV_%date%.txt
)
Aufgrund der Funktionsweise von IF errorlevel ... musst du auf Errorlevel 1 abfragen und nicht auf Errorlevel 0.
Genaueres kannst du unter
http://home.mnet-online.de/horst.muc/ger/batkurs_ansi.txt
nachlesen.
 
#6
Hallo,

ich bin auf diesen Beitrag über Google gekommen. Er ist zwar schon ein paar Tage älter aber ich hoffe jemand von euch hilft mir vielleicht trotzdem. Die oben geschilderte Aufgabe habe ich etwas komplexer. Es soll in einem Ordner mit sehr vielen txt Dateien mir unterschiedlichen Namen nach einem Wert gesucht werden. Wenn dieser Wert in der txt gefunden worden ist soll diese in ein Unterverzeichnis verschoben werden.
Der Ordner heißt z.B. NC Daten unsortiert. In der txt soll z.b. nach dem Wert t=15mm gesucht werden. Dann soll die Datei in das Verzeichnis NC Daten\bl 15 verschoben werden.

Vielen Dank im Vorraus für eure Hilfe. Bitte entschuldigt wenn das Problem bereits einmal diskutiert worden ist. Meine Suche hat leider erstmal kein Ergebniss hervorgebracht.

MfG

FF

Edit: Das ganze soll als Schleife alle Dateien durchlaufen. Im Bestenfalls suchen dann weitere Schleifen nach anderen Werte oder sucht man nach alternativen vielleicht besser in der txt über eine if else schleife?