cmdcrasher
Goto Top

Batch Skript

Probleme mit einem cmd Skript ! Ich hoffe es kann mir jemand eine kurze Hilfestellung diesbezüglich geben!

Hallo, ich habe bei meinem skript folgendes Problem! Ich möchte bei jedem Befehl der im meine skript ausgeführt wird eine ausgabe ob dieser erfolgreich war oder nicht, ist das möglich? Hier mein skript!

Ich komme momentan einfach nicht weiter!!!!!!!!!!!
echo.>> %TEMP%\liste.txt 
echo xxxxxxx >> %TEMP%\liste.txt 
hostname >> %TEMP%\liste.txt 

for /f "Tokens=*" %%a in ('date /t') do set day=%%a   
for /f "Tokens=*" %%b in ('time /t') do set tim=%%b  

echo Heute ist der %day%, die Zeit ist %tim% Uhr. >> %TEMP%\liste.txt

reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Meine Software" /f >> %TEMP%\liste.txt  

regsvr32 /u /s %systemroot%\system32\meine.dll >> %TEMP%\liste.txt
if not %errorlevel% 1 goto fehler
echo befehl erfolgreich >> %TEMP%\liste.txt
:fehler
echo befehl nicht erfolgreich >> %TEMP%\liste.txt

del /q /f %systemroot%\system32\meine.dll >> %TEMP%\liste.txt
if %errorlevel% 1 goto fehler
echo befehl erfolgreich >> %TEMP%\liste.txt
:fehler
echo befehl nicht erfolgreich >> %TEMP%\liste.txt

rd /s /q c:\Ordner >> %TEMP%\liste.txt

xcopy %temp%\liste.txt \\server\source\log
if %errorlevel% 1 goto fehler
echo befehl erfolgreich
:fehler
echo befehl nicht erfolgreich

Ich hoffe ich bekomme hier ein bisschen unterstützung, würde mich freuen face-smile.

Gruß cmdcrasher

Content-Key: 181721

Url: https://administrator.de/contentid/181721

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: Skyemugen
Skyemugen 09.03.2012 um 17:24:12 Uhr
Goto Top
Aloha,

wir geben ja gerne Hilfestellung(en), in der Regel aber bevorzugt jenen, die unsere Formatierungshilfe nicht nur für ein lustiges, buntes Wort beim Erstellen betrachten, sondern auch anschauen, um dann Skripte in der passenden ##blue|## Formatierung zu präsentieren.

greetz André
Mitglied: bastla
bastla 09.03.2012 um 19:34:58 Uhr
Goto Top
Hallo cmdcrasher und willkommen im Forum!

"">"&&" bzw "

Grüße
bastla

P.S.: Die von Skye erwähnte Formatierung lässt sich auch nachträglich noch erreichen ...
Mitglied: cmdcrasher
cmdcrasher 12.03.2012 um 09:26:20 Uhr
Goto Top
Hallo und sorry das ich es nicht gleich richtig gemacht habe! Ich hoffe jetzt immer noch das mir jemand etwas Hilfestellung geben kann.

Danke .

Gruß cmdcrasher
Mitglied: Skyemugen
Skyemugen 12.03.2012 um 10:04:35 Uhr
Goto Top
Zitat von @cmdcrasher:
Ich hoffe jetzt immer noch das mir jemand etwas Hilfestellung geben

Und bastlas Link war jetzt inwiefern keine genügende Hilfestellung?
Mitglied: cmdcrasher
cmdcrasher 12.03.2012 um 10:24:24 Uhr
Goto Top
Weil ich cmd befehle zu genüge im internet finde, aber einfach vom verständnis her nicht weiter komme. Ich möchte bei jedem commando eine ausgabe in meine list.txt haben aber leider führt er das so wie oben nicht aus!
Mitglied: bastla
bastla 12.03.2012 um 11:36:24 Uhr
Goto Top
Hallo cmdcrasher!


Grüße
bastla
Mitglied: Skyemugen
Skyemugen 12.03.2012 um 11:57:24 Uhr
Goto Top
|| [...]	Befehl1 || Befehl2	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).

Wobei das beim DEL-Befehl nicht greifen wird, denn angenommen die Datei existiert nicht, dann gibt es einen errorlevel 0 und eine Fehlermeldung im cmd, die nur per 2>>%temp%\liste.txt in die Datei zu schreiben wäre, welchen errorlevel regsrv ausgibt ... keine Ahnung, da zumindest sollte
(regsvr32 /u /s %systemroot%\system32\meine.dll>nul && echo RG Befehl erfolgreich || echo RG Befehl nicht erfolgreich)>>%temp%\liste.txt
seinen Dienst tun, wenn die Datei nicht exisiert, gibt es den errorlevel 3

... nebenbei bemerkt sind die gotos momentan auch überflüssig, denn if hat auch else face-wink

greetz André
Mitglied: cmdcrasher
cmdcrasher 12.03.2012 um 16:15:45 Uhr
Goto Top
Hallo André,

vielen dank für die schnelle hilfe!! Das hat super funktioniert, ich habe es gerade mal getestet auch mit den anderen befehlen (rd;reg del;).
Klasse face-big-smile.

Jetzt müßte ich auch noch für die anderen befehle wie..

del /q /f %systemroot%\system32\meine.dll >> %TEMP%\liste.txt 
type %TEMP%\liste.txt >> \\serverpfad\log\gesamt.txt

eine lösung finden. Also den inhalt aus der list.txt auf dem server im netz ablegen (gesamt.txt), aber das geht so wie oben nicht.

Gruß cmdcrasher
Mitglied: bastla
bastla 12.03.2012 um 19:15:18 Uhr
Goto Top
Hallo cmdcrasher!

Um den Erfolg beim Dateilöschen zu prüfen, kannst Du ja ein
(dir %systemroot%\system32\meine.dll >nul 2>nul && echo Nicht gelöscht || echo Gelöscht)>>%TEMP%\liste.txt
nachlegen ...

Grüße
bastla
Mitglied: cmdcrasher
cmdcrasher 13.03.2012 um 09:28:33 Uhr
Goto Top
Hi bastla,

thanks a lot face-wink auch das hat super geklappt, freu mich! Ich bin fast am ziel. Wie bekomme ich jetzt noch den inhalt aus der list.txt am lokalen rechner in %temp% auf den server in einer freigabe im ordner z.b: \\servername\log? Wär super wenn das auch noch möglich wäre!

Vielen herzlichen dank euch !!

Servus cmdcrasher
Mitglied: Skyemugen
Skyemugen 13.03.2012 um 10:14:55 Uhr
Goto Top
...

was hindert dich jetzt daran, nicht direkt >>\\servername\Verzeichnis\liste.txt statt >>%temp%\liste.txt zu nutzen?

greetz André
Mitglied: cmdcrasher
cmdcrasher 13.03.2012 um 10:55:34 Uhr
Goto Top
Hi bastla,

er bringt hier aber auch die ausgabe gelöscht, auch wenn es die datei nicht mehr gibt !?
Mitglied: cmdcrasher
cmdcrasher 13.03.2012 um 11:13:04 Uhr
Goto Top
Hi André,

jetzt hab ich ein kleines verständnisproblem face-sad! Ich versuch es noch mal zu erklären. Ich möchte gerne an jedem PC an dem das skript ausgeführt wird denn inhalt von list.txt auslesen lassen und in eine gesamt.txt auf dem server eintragen lassen. Das alles in einer text datei steht.

cmdcrasher
Mitglied: Skyemugen
Skyemugen 13.03.2012 um 11:23:20 Uhr
Goto Top
... gut, dann formuliere ich es anders:

was hindert dich jetzt daran, nicht direkt >>\\servername\Verzeichnis\liste.txt statt >>%temp%\liste.txt zu nutzen?
acht halt, das steht ja schon oben, na, wird wohl seinen Grund haben face-wink [du weißt, dass >> immer an die Datei etwas anhängt, ohne zu überschreiben?]

Ausgenommen alle PCs tun dies zur gleichen Zeit, dann schreibt da nur einer, sonst keiner, da die Datei dann bereits exklusiv geöffnet ist, weiß ja nicht, wie viele PCs das werden aber herzlichen Glückwunsch im Voraus an den Bandsalat face-wink

greetz André
Mitglied: Skyemugen
Skyemugen 13.03.2012 um 11:24:43 Uhr
Goto Top
Sonst kann man ja gleich mit if exist ... else arbeiten
Mitglied: cmdcrasher
cmdcrasher 13.03.2012 um 11:33:09 Uhr
Goto Top
Ok also würde das so funktionieren?

(if exist %systemroot%\system32\meine.dll(del /q /f %systemroot%\system32\meine.dll && echo gelöscht) else (echo datei fehlt)) >> %TEMP%\liste.txt

Greetz
Mitglied: Skyemugen
Skyemugen 13.03.2012 um 11:43:54 Uhr
Goto Top
Ja, wenn du das fehlende Leerzeichen zwischen dll und (del hinzufügst, dann funktioniert das so.
Mitglied: cmdcrasher
cmdcrasher 13.03.2012 um 11:53:16 Uhr
Goto Top
Also könnte ich sicherheitshalber auch für jeden PC eine extra txt anlegen lassen ! Könnte ich das bei jedem commando so machen immer >> \\servername\verzeichnis\%computername%.txt statt >> %TEMP%\liste.txt?
(dir %systemroot%\system32\meine.dll >nul 2>nul && echo Nicht gelöscht || echo Gelöscht) >> \\servername\verzeichnis\%computername%.txt

Grüßle
Mitglied: Skyemugen
Skyemugen 13.03.2012 um 12:00:18 Uhr
Goto Top
Aloha,

ja, natürlich.

Frage: Wird das mehrmalig pro Rechner geschehen, oder einmalig, wenn mehrmalig, wie lange soll die Datei geführt werden, bzw. wäre es dann nicht auch sinnvoll, bei einem erneuten Durchlauf die alte Datei zu überschreiben (via echo\ >\\servername\verzeichnis\%computername%.txt nach deinem o.g. Skript), statt den Gesamtablauf jedes Mal als Salat anzuhängen?

greetz André
Mitglied: cmdcrasher
cmdcrasher 13.03.2012 um 14:15:52 Uhr
Goto Top
Hi all,

also zusammenfassend funktioniert jetzt eigentlich alles, ausser ein paar schönheitsfehlerchen! Wenn ich jetzt das komplette skript ausführe (lokal am pc), dann fehlen auf dem server (%computername%.txt) manche ausgaben, die stattdessen in der cmd am pc lokal ausgegeben werden!
Vermutung!! Die befehle werden schneller ausgeführt als die daten auf den server geschrieben werden können. Könnte das so sein? Gibt es einen parameter mit dem man nach jedem commando eine verzögerung erzwingen kann?

sers
Mitglied: cmdcrasher
cmdcrasher 14.03.2012 um 12:11:12 Uhr
Goto Top
Hallo,

so hab es jetzt so gelöst nach jedem command und geht auch! Ist zwar kein direkter wait command aber damit scheint das skript zeit zu haben alles schön gepflegt abzuarbeiten!

ping /n 6 localhost >nul

Möchte mich noch einmal bei euch bedanken für die schnelle und nette hilfe. Schöne woche noch und vielleicht schreibt man sich ja wieder einmal, werd hier jetzt öffters mal reinschauen.

Schönen Gruß

cmdcrasher