crazycat
Goto Top

Wenn jemand wirklich ganz furchtbar langweilig ist...Batch-Datei erklären?

Für mich teilweise völlig unverständlich...

Hallo miteinander,

ehrlich - ich hab versucht, das zu durchschauen, aber ich werde bei aller Liebe nicht schlau daraus. Klar vielleicht, als absolut Beginner...

Ich weiss natürlich, dass Ihr alle weit besseres zu tun habt - da sie funktioniert, besteht auch kein wirklicher Bedarf für dieses Post, ausser meinem Ehrgeiz, es zu verstehen, nachdem ich Batch-Luft geschnuppert hab. Ich hab sogar Bibers Date-Time-Tutorial mal durchforstet, nach einer teilweisen Antwort...

Ich habe hier eine Batch, die von einem Unbekannten geschrieben wurde. Sie sichert das Log wohl am Anfang und nach Beendigung des Spieles (wird bei jedem Start neu geschrieben)


cd logs
copy nwlog.txt+nwclientlog1.txt nwlog_temp.txt
del nwlog.txt
ren nwlog_temp.txt nwlog.txt
cd ..

spiel.exe +connect server:ip

cd logs

if "%time:~0,1%" == "1" goto time2
if "%time:~0,1%" == "2" goto time2

rename nwclientLog1.txt log_%date:~6,4%-%date:~3,2%-%date:~0,2%_0%time:~1,1%-%time:~3,2%-%time:~6,2%.log
goto done

:time2
rename nwclientLog1.txt log_%date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%.log

:done

copy nwclientlog1.sav nwclientlog1.txt
copy nwlog.sav nwlog.txt
cd ..

Das, was mir Kopfzerbrechen macht:

1. Die eigentliche Log-Datei ist nwclientlog1.txt. Er setzt aber eine zusätzliche nwlog.txt noch voraus, selbst erstellt - warum?

2. Warum zweimal der Verweis auf time2? Beide Zeilen führen uns zum gleichen rename, ohne dass 1 und 2 näher definiert wäre?

3. Ebenso zweimal rename, der fast gleiche Befehl, bis auf die 0 bei %_0%time....

Die Datei heisst aber, soweit ich das sehen kann, immer gleich, und wird auch immer erstellt, egal, wie wenig oder viel Inhalt sie tatsächlich enthält...

4. Es gibt überhaupt kein nwlog.sav und ebensowenig nwclientlog.sav - müsste man erstellen, doch wozu? Die werden, soweit ich das sehe, gar nicht erst angetastet?

Ich kann den Verfasser leider nicht mehr fragen. Darum meine Frage an Euch, wenn jemand Lust hat, das zu erklären. Falls nicht, natürlich auch überhaupt kein Problem face-smile

Lieben Gruss und eine schöne Arbeitswoche,

Cat

PS: Und nein, ich bin nicht _die_ CrazyCat, die hier offenbar einmal angemeldet war und wesentlich mehr von Batch versteht als ich face-smile

Content-ID: 51507

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

Ausgedruckt am: 26.11.2024 um 07:11 Uhr

drobskind
drobskind 13.02.2007 um 07:53:59 Uhr
Goto Top
cd logs --------------- wechsel ins verzeichnis logs
copy nwlog.txt+nwclientlog1.txt
nwlog_temp.txt --------- kopiert den inhalt von nwlog und nwclientlog in nwlog_temp
del nwlog.txt ---------löscht nwlog UM
ren nwlog_temp.txt nwlog.txt ------- nwlog_temp den namen nwlog zu geben
cd ..--------- verlässt das verzeichnis logs wieder

spiel.exe +connect server:ip ----- startet das spiel mit dem übergabeparameter (IP-adresse vom server)

cd logs ---- wechselt wieder in verzeichnis logs

if "%time:~0,1%" == "1" --------------- ändert einige zeitangaben.... (kp was genau) warscheinlich logeinträge erstellung!
goto time2
if "%time:~0,1%" == "2"
goto time2

rename nwclientLog1.txt
log_%date:~6,4%-%date:~3,2%-%date:~0,2%_0%time:~1,1%-%time:~3,2%-%time:~6,2%.log
goto done

:time2
rename nwclientLog1.txt
log_%date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%.log

:done

copy nwclientlog1.sav nwclientlog1.txt----------- sichert anscheinend die savegames im log
copy nwlog.sav nwlog.txt
cd .. --- verlässt wieder das verzeichnis


so bei ein paar stellen kann ich dir helfen!!

mfg
drobskind
bastla
bastla 13.02.2007 um 08:07:27 Uhr
Goto Top
Hallo CrazyCat!

zu 1)
Ziel der "copy/del/ren"-Aktion ist es, ein fortlaufendes Log in "nwlog.txt" zu erzeugen, indem an eine bereits vorhandene "nwlog.txt" die "nwclientlog1.txt" angefügt wird - ließe sich einfacher realisieren mit
"type nwclientlog1.txt>>nwlog.txt"  
zu 2 und 3)
Hier ist das Ziel die Formatierung der Uhrzeit im Dateinamen der umzubenennenden Log-Datei, da %time% keine führende 0 ausgibt - anhand der ersten Stelle der Uhrzeit soll entschieden werden, ob eine "0" im Dateinamen vorangestellt werden soll (die hast Du bei den "ren"-Zeilen ja schon bemerkt). Dazu wird mit den beiden "if" abgefragt, ob die Uhrzeit mit "1" oder "2" beginnt und in diesem Fall keine "0" vorangestellt (was dann aber bei Zeiten zwischen 1:00:00 und 2:59:59 auch nicht passieren würde). Um die Vorgangsweise hier richtig zu stellen, müsstest Du etwas in der Art machen:
for /f "tokens=1-3 delims=:" %%i in ('echo %time%') do (set St=%%i) & (set Min=%%j) & (set Sek=%%k)  
if %St% lss 10 set "St=0%St%"  
set Sek=%Sek:~0,2%
Danach könntest Du die einzelnen Variablen %St%, %Min% und %Sek% verwenden.

zu 4)
Nach dem "Ablegen" der aktuellen "nwclientlog1.txt" soll offensichtlich eine (von Hand) gespeicherte Version davon ("nwclientlog1.sav") zur aktuellen Version gemacht werden.
Die letzte Zeile schließlich führt die Aktionen am Anfang ad absurdum, da die dort erstellte Log-Sammeldatei "nwlog.txt" ebenfalls mit einer gespeicherten Version ("nwlog.sav") überschrieben würde.

Ob Du diese beiden Zeilen überhaupt brauchst, kann ich nicht beurteilen - solange Du aber die jeweiligen ".sav"-Dateien nicht zur Verfügung hast, erntest Du damit nur Fehlermeldungen der Art "Das System kann die angegebene Datei nicht finden.".

Grüße
bastla

[Edit] @drobskind - Sorry, hatte Dich nicht bemerkt ... [/Edit]
Biber
Biber 13.02.2007 um 09:46:54 Uhr
Goto Top
Moin CraziestCat,

...und noch eine weitere Anmerkung/Erläuterung:

Unnötige Fehlerquelle in dem Schnipsel oben ist die Mimik mit "cd logs" am Anfang und "cd.." am Ende.

Das funktioniert ja erstens nur, wenn man/frau den Batch auf dem richtigen Laufwerk und zweitens sogar im richtigen Unterverzeichnis (eine Ebene über "..\logs") aufruft.

Besser:
- am Anfang des Batches altes Verzeichnis sichern und in neues Laufwerk/Verzeichnis wechseln mit "PushD d:\subdir\whatever\logs" und
- am Ende des Batches den alten Zustand (Laufwerk/Verzeichnis) wieder herstellen mit "PopD".

Gruss
Biber
CrazyCat
CrazyCat 13.02.2007 um 11:26:49 Uhr
Goto Top
Guten Morgen Ihr Drei,


@drobskind: Das war wirklich Schritt für Schritt-Erklärung, klasse, danke für die Mühe face-smile

@ bastla: Mein erster Schritt nach Deiner Erklärung ist wohl, die .savs-Zeilen rauszunehmen und das auch mit dem type-Befehl zu probieren face-smile

For-Befehle... die ganzen Sonderzeichen machen mir Angst ;). Da werde ich mich wohl wirklich nochmal genauer einlesen müssen.

Danke auch Dir, dass Du auch Licht in die Time- und rename-Zeilen gebracht hast!

@Biber: Ja, das ist richtig - die bat liegt im richtigen Verzeichnis. Hm... pushd und popd wäre natürlich weitaus proffessioneller, als "cd logs" und "cd..". Oder eine Variable a la "Sicher=C:\logs" und dann beim Rename herumzumurksen. Spart Zeilen - anhand Deiner Beiträge - bist Du evtl. ein Sparfuchs, kein Biber? *scherz*

Nochmal ganz lieben Dank Euch allen. Ihr habt mir sehr geholfen.
Jetzt kann ich etwas sicherer versuchen, das Ganze gründlich zu vermurksen (was ich schon geschafft hab)

Ich versuche nämlich, die Sekunden wegzulassen, und ihm dafür mit mit

if exist log%date%.log >> log%date:~6,4%-...

zu veranlassen, Logs vom gleichen Tag aneinanderzuhängen.
Klappt noch nicht, aber ich verstehe jetzt wenigstens besser, was der Urheber der Batch da fabriziert hat face-smile
Den Rest schaff ich auch noch...

Merci beaucoup!

Lieben Gruss,

Cat
CrazyCat
CrazyCat 22.02.2007 um 21:39:45 Uhr
Goto Top
Ich setze den Beitrag mal auf "gelöst" - nur bin ich leider zu dumm, um Sternchen zu verteilen, tut mir leid. (Sorry, das ich das erst so spät mache - ich hab erst heute einen Kommentar von Biber dazu gefunden, das man das machen kann/sollte).

Mir jedenfalls hat Eure Hilfe grossartig geholfen. Nun, ich hab das alte Batch-File ein "bisserl" umgearbeitet. Ich würde jetzt wohl nur Spam produzieren, würde ich das posten, aber vielleicht ist ja irgendeiner da draussen, der so eine Batch sucht und für den meine Lösung ein wenig hilfreich wäre. Dann schreibt mich per Email an, ok?

Lieben Gruss,

Cat
Biber
Biber 22.02.2007 um 22:11:54 Uhr
Goto Top
Moin KratziKatzi,

nein, Du bist nicht zu dumm, Sternchen zu verteilen - diese Funktion ist gerade bei unser allem WebMaster scholl "in Überarbeitung".
[Für Nicht-ITler: deutsche Übersetzung dieses Fach-Terminus ist "in Vergessenheit geraten", "den Weg alles Irdischen gegangen", " aus Kosten-Nutzen-Erwägungen neu priorisiert worden"].

Mit anderen Worten - diese Funktion ist Vergangenheit und die meisten vermissen sie auch nicht soooo sehr.
Aber stellvertretend für die anderen Poster bedanke ich mich für den guten Willen und freue mich über die virtuellen Sterntaler.

Wenn Du magst (Platz genug ist hier), dann setz doch Deinen final batch noch in Deinen letzten Kommentar rein.
Editieren kannst Du auch, wenn der Beitrag geschlossen ist.

Was ich jetzt nämlich gleich tun werde.

Schönes Wochenende und bis zum nächsten Batch

Biber