PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DOS: Kann man das scripten?


WhiteVelvet
2009-04-03, 14:51:48
Gibt es mit einem DOS-Befehl die Möglichkeit, zu prüfen, ob in einer einfachen Textdatei ein bestimmter String enthalten ist?

Hintergrund: Eine Gruppenrichtlinie soll einer Systemdatei eine Zeile Text hinzufügen, aber nur, wenn sie noch nicht enthalten, quasi sowas:



if "meinstring" not enthalten in systemdatei.txt then
echo "meinstring" >> systemdatei.txt



Danke für Tipps!

nobex
2009-04-03, 15:40:09
Hilft Dir evtl. 'findstr /?' weiter?

redfalcon
2009-04-03, 16:09:59
findstr meinstring systemdatei.txt

gibt dir meinstring zurück, wenn er in der Datei drin ist, und


echo meinstring >> systemdatei.txt


schreibt dir das in die Datei rein.

Müsste also sowas wie

if "findstr meinstring systemdatei.txt"=="meinstring" GOTO replace

:replace
echo meinstring >> systemdatei.txt


sein, aber ohne Gewähr, kenne mich mit Batchscripten nicht so aus.

Siehe unten.

WhiteVelvet
2009-04-03, 16:15:51
Wahnsinn! Danke!

redfalcon
2009-04-03, 16:36:41
Hab das oben mal aktualisiert, der Code mit dem GOTO funktioniert bei mir definitiv mit einfachen Textdateien. Wie das mit Systemdateien aussieht (Berechtigungen?) hab ich aber nicht probiert.

MooN
2009-04-03, 16:38:54
Ähm..
Man sollte das nur dann reinschreiben, wenn es eben NICHT schon drinsteht.
Ausserdem hilft dir das Label nichts, wenn es sowieso abgearbeitet wird (exit vergessen).


findstr meinstring systemdatei.txt || GOTO replace
exit

:replace
echo meinstring >> systemdatei.txt

redfalcon
2009-04-03, 16:47:08
Ähm..
Man sollte das nur dann reinschreiben, wenn es eben NICHT schon drinsteht.
Ausserdem hilft dir das Label nichts, wenn es sowieso abgearbeitet wird (exit vergessen).


Äh, hast natürlich recht, mein Fehler. :redface:

MooN
2009-04-03, 17:10:20
Ich beklugscheiße mich mal selbst:


findstr meinstring systemdatei.txt || echo meinstring >> systemdatei.txt


:usad:

nobex
2009-04-03, 19:07:44
Ups, die Variante mit den 2 Strichen kenne ich gar nicht. Gibt es dafür einen Fachausdruck?
Ich hätte statt dessen den Errorlevel nach findstr augewertet.

HeldImZelt
2009-04-03, 21:46:53
Doublepipe
Verwenden Sie dieses Zeichen, um den auf || folgenden Befehl nur dann auszuführen, wenn der Befehl vor || fehlschlägt. Cmd.exe führt zunächst den ersten Befehl aus. Der zweite Befehl wird nur dann ausgeführt, wenn der erste Befehl nicht erfolgreich ausgeführt wird (und ein Fehlercode größer Null zurückgegeben wird).