crazycat
Goto Top

Batch-Datei: Mehrmals Text verändern und dann noch weiter ausführen

Batch-Datei mit mehreren Aktionen, u.a. Text ersetzen, dann anderes Programm starten

Hallo zusammen,

ich weiss, dass vor allem Biber jetzt wohl stöhnen wird. Ich hab ja bereits ein wenig gesucht, so ist es nicht, aber nicht wirklich Hilfe gefunden. Zudem bin ich Anfänger in der Programmierung von Batch-Dateien (zweites kollektives Stöhnen? face-smile ), und blick nicht wirklich durch.

Worum es geht:

Ich spiele bei einem Online-Spiel mit. Für dieses habe ich zwei Accounts, nur einer ist jeweils in der player.ini verankert - je nachdem, was zuletzt als Login feststand. Ich möchte, statt das jedes Mal per Hand im Login-Fenster neu eingeben zu müssen, also per Knopfdruck Account-Name 1 und Passwort 1 durch Account-Name 2 und PW 2 ersetzen lassen, und umgekehrt, je nachdem, welche Bat ich starte.
Der Umweg über rename und copy (also Dateientausch direkt, zwei .ini durch ein temp-Verzeichnis) wäre, soviel hab ich verstanden, furchtbar kompliziert. Den Batch Replacer hab ich mir angesehen, der lässt aber nur eine Änderung der Datei in eine Richtung zu. Zudem muss ich den manuell bedienen und wohl auch beenden, und dann soll die Batch-Datei ja auch weiterlaufen - das Spiel eben per directconnect starten.

Ersetzt werden müsste jedes Mal Name, evtl. Email und Passwort.

Player Name=Name
Email=Email
Password=passwort

Danach soll er "im Text weitermachen", sprich, das Spiel starten, die Logs sichern. All das, was er jetzt auch tut.

Könnt Ihr mir, bei aller Nerverei durch eben diese recht ähnlichen Fragen, bitte helfen?
Das wäre grossartig.

Vielen Dank im Voraus,

Cat

PS: Und ja, ich bin zwar eine Frau, aber ich geb ein Feedback ab, Biber, versprochen ;)
Egal, wie die Antwort ausfällt.

Content-ID: 51339

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

bastla
bastla 11.02.2007 um 08:50:52 Uhr
Goto Top
Hallo CrazyCat und willkommen im Forum!

Verstehe ich es so richtig, dass sich die beiden Konten nur durch die 3 angegebenen Zeilen in einer einzigen ini-Datei unterscheiden, oder gibt es (je nach Spielstand etc) in den .ini-Dateien auch andere Änderungen zu berücksichtigen? Hintergrund der Frage: Wenn der Rest der .ini konstant ist, genügten eigentlich 2 "Vorlagen", von denen die jeweils Benötigte in den Spiele-Ordner kopiert würde.

Grüße
bastla

P.S.: Ich wüsste übrigens nicht, was die Tatsache, dass Du eine Frau bist (was übrigens ohne Deinen dezenten Hinweis noch nicht einmal aus Deinem Profil abzuleiten gewesen wäre), hier für eine Rolle spielen sollte ...
miniversum
miniversum 11.02.2007, aktualisiert am 18.10.2012 um 18:31:38 Uhr
Goto Top
ich würde es ähnlich wie hier machen:
Mit Batch Scriptzeile in .txt ändern.

entweder eine Batch anlegen die fragt ob Spieler 1 oder 2 genommen werden soll udnd ann eben per echo die Daten von 1 bzw. 2 in eine Player.ini schreiben und den Rest dranhängen, wenn der immer gleich ist. Danach das Spiel starten.
Oder halt 2 batches schreiben, für jeden Spieler eine.

Alternativ eben das jedesmalige hin udn her kopieren vershciedener Player.ini's. ich weiß nicht was daran so schwierig sein sollte wenn du es in der Form machst:

copy c:\spieler1\player.ini c:\spiel\player.ini
c:\spiel\spiel.exe
copy c:\spiel\player.ini c:\spieler1\player.ini

Für den Zweiten Spieler entsprechend. Dann hast du 2 batches, bzw. i mit auswahl und das wars.

miniversum
CrazyCat
CrazyCat 11.02.2007 um 12:31:35 Uhr
Goto Top
Hallo Ihr beiden,

erstmal vielen herzlichen Dank für die superschnellen Antworten!

@bastla: Das war mehr oder weniger ein Scherz, weil Biber in einem anderen Beitrag vergeblich auf ein Feedback gewartet hat und dann meinte "Typisch Frau" oder so face-smile

Und ja, ich wollte zwei Batch-Dateien. Und wenn miniversum recht hat... ich bin so ein Schaf.
Da werkel ich gestern ewig mit player1.ini und player2.ini und copy und rename und if exist herum... und bräuchte, nach Eurer Lösung, ja nur zwei unterschiedlich benannte _Ordner_, aus denen ich die modifizierten inis kopiere...*haut sich gegen die Stirn*

Vielen Dank - Ihr habt mir einen weit einfacheren Weg gezeigt. Zehn Zeilen-Tausch gegen drei...

Zu dem Link, miniversum: Wäre auch möglich, aber eine manuelle Eingabe wollte ich ja vermeiden, faul, wie ich bin face-smile

Mille grazie, und einen wunderbaren Tag Euch noch.
Ich probier das gleich aus und geb Euch dann (vermutlich unnötigerweise, das muss einfach funktionieren) noch ein Feedback.

Lieben Gruss,

Cat
Biber
Biber 11.02.2007 um 12:43:23 Uhr
Goto Top
[Kommentar inzwischen obsolet..
Nur weil ich es schon fertig getippt hatte... habe inzwischen auch CrazyCat's Antwort gelesen]

Moin CrazyCat,

ich würde mich bastla und miniversum anschliessen, was die Strategie angeht.
Ein dateiweises Austauschen ist mit Batch einfacher als ein zeilenweises/wortweises Ersetzen in einer Datei.

Für mich ist das ein Szenario mit 3, maximal 5 Dateien, die im Spiel sind.
Angenommen, Deine Accounts heißen "CrazyCat" und "EvenCrazierCat", dann hättest Du:
- eine Profil.ini von letzten Spiel, in der eintweder der eine ohne andere Account steht.
- und Du kannst Dir eine Account1.ini und eine Account2.ini basteln als Vorlage für jeden der beiden Spielerinnen-Namen.
- Datei 4 und 5, die ich sicherheitshalber vorsehen würde, sind die jeweils letzten aktuellen Sicherungen der funktionierenden Profil.ini

Damit wäre eine grobe Skizze für den Spiel-Start-Batch:
@Echo off & setlocal
REM Feststellen und Anzeigen, was aktuell in der profil.ini steht...
Findstr /i /c:"Player Name=CrazyCat"           cat\profil.ini>nul && Set "last=CrazyCat" && echo Aktuelles Profil ist CrazyCat  
Findstr /i /c:"Player Name=EvenCrazierCat" cat\profil.ini>nul && Set "last=EvenCrazierCat" && echo Aktuelles Profil ist EvenCrazierCat  
Set /p ChgProfile="Profil [0=so lassen 1=CrazyCat_last" 2=CrazyCat_Vorlage 3=EvenCrazierCat_last 4=EvenCrazierCat_Vorlage]"  
if [%ChgProfile%]==  goto :eof
:: sonst: letztes Profil sichern
If [%last%] NEQ  copy /y cat\profil.ini cat\%last%_last.ini 
if [%ChgProfile%]==[1] copy /y cat\CrazyCat_last.ini cat\profil.ini 
if [%ChgProfile%]==[2] copy /y cat\CrazyCat_Vorlage.ini cat\profil.ini 
if [%ChgProfile%]==[3] copy /y cat\EvenCrazierCat_last.ini cat\profil.ini 
if [%ChgProfile%]==[4] copy /y cat\EvenCrazierCat_Vorlage.ini cat\profil.ini 
...
...Start_des_Onlinespiels

Ob es Sinn macht, die "...Vorlage.ini"s mitzuschleppen, weiß ich nicht.
Aber ich würde auf jeden Fall die letzten funktionierenden Profil.inis verwenden, weil dort vielleicht bei neueren Onlinespiel-Versionen neuere Einträge hinzukommen.

Gruss Biber
miniversum
miniversum 11.02.2007 um 13:48:26 Uhr
Goto Top
na mit rename würds ja auch gehen:

rename c:\spiel\player1.ini c:\spiel\player.ini
c:\spiel\spiel.exe
rename c:\spiel\player.ini c:\spiel\player1.ini

und entsprechend für spieler2

miniversum
CrazyCat
CrazyCat 11.02.2007 um 13:53:39 Uhr
Goto Top
Hallo Biber face-smile

ich hab den ersten Tip ausprobiert, und er funktioniert - danke ihr zwei.

Allerdings ist dein Argument, die .ini könnte sich ja auch mal ändern, recht zwingend.
Das wäre also die weit elegantere Lösung.
Ich dachte mir irgendwie, dass es mit Variablen und "find" in irgendeiner Form gehen muss, hab das gleiche im Prinzip aber eben mit copy, rename und if exist probiert *schmunzel*

So wie ich das verstehe, muss ich für die bats nur jeweils den Eintrag:
if [%ChgProfile%]== goto :eof
entsprechend abändern, je nachdem, was ich eingetragen haben will?

Das "="Profil" gibt mir allerdings noch Rätsel auf:
Set /p ChgProfile="Profil

In jedem Fall vielen lieben Dank, Biber.

Lieben Gruss,

Cat


EDIT: Ah..er fragt ab. Das wollte ich allerdings vermeiden - dann würde es zwar auch mit einer Bat gehen...
Mal sehen, ob ich das jetzt so umgemodelt bekomm, dass er zwar sichert, aber nicht abfragt - mit zwei Batches...
CrazyCat
CrazyCat 11.02.2007 um 15:15:58 Uhr
Goto Top
Soo - nochmals hallo von der nervigen, verrückten Katze face-smile

Biber, vielleicht sollte ich voranschicken, dass ich bei BASIC damals schon kläglich versagt hab...
Zu dumm, um Zusammenhänge einfach zu erkennen, fürchte ich. Aber ich geb mir Mühe.
Meinen vorhergehenden Beitrag kann man getrost ignorieren..Schwachsinn.

Mal sehen, ob ich das jetzt so richtig verstanden hab:

Ich brauche eine CrazyCat_Vorlage.ini und eine EvenCraziestCat_Vorlage.ini bereits im Ordner, das sind die präparierten.
Am Anfang muss ich logischerweise zwingend 3 bzw. 4 benutzen, damit er beide Vorlagen als _last speichern kann (oder ich log manuell einmal um). Dient auch später als Sicherheit, falls die player.ini und sämtliche _last irgendwie zerschossen sind, richtig? Sonst werden die nie gebraucht (?)

Mit 1 und 3 veranlasse ich ihn, die aktuelle player.ini je nach Inhalt als CrazyCat_last oder EvenCraziestCat_last zu sichern, und gleichzeitig wird die vorhandene _last in die profil.ini umbenannt.

Soweit, so gut, das funktioniert auch - und eine Abfrage bringt mich nicht um.

Klar wäre es fein, wenn er sichern würde, ohne mich gross erst zu fragen, dann halt über zwei Batches (player1.bat und player2.bat). Das ist bestimmt auch kinderleicht zu ändern, aber im Augenblick hab ich mehr als nur ein Brett vorm Kopf.

Die Änderungen wegen des connects - da fehlt bei dem einen Account noch ein Anhang, bekomm ich sicher mit einer "goto"-Erweiterung bei den "if" hin.
(z. B. if [%ChgProfile%]==[4] copy /y EvenCraziestCat_last.ini player.ini goto Einloggen2
if [%ChgProfile%]==[1] copy /y CrazyCat_last.ini player.ini goto Einloggen1

:Einloggen1
spiel.exe +connect server:ip

:Einloggen2
spiel.exe +connect server:ip -dmc +password )

(testet das erstmal)

Vielen Dank nochmal face-smile

Lieben Gruss,

eine Katze mit rauchendem Kopf...
CrazyCat
CrazyCat 11.02.2007 um 16:13:38 Uhr
Goto Top
Guten..Tag face-smile

Es funktioniert. Eindeutig, prima und gut. Mit Abfrage, aber egal.

den goto musste ich lediglich noch mit && anhängen - if ... && goto Einloggen1
(für jemanden, ders nachmachen will und ebenso viel Ahnung hat, wie ich)

Ein ganz herzliches Dankeschön nochmal an Euch drei!

Lieben Gruss,

Cat
Biber
Biber 11.02.2007 um 16:25:26 Uhr
Goto Top
Prima, CrazyCat,

ich hatte auch schon (wahrscheinlich genau wie miniversum und bastla) vor einer Stunde überlegt,
ob ich nochmal beim lauten Überlegen helfe oder ob Du es allein zum Fliegen bekommst...
Ich war auch ganz zuversichtlich, dass Du es allein gebacken bekommst - zu Recht, wie zu sehen ist.

Dann werde ich den Beitrag jetzt guten Gewissens schliessen.

Schönen Sonntag noch und Danke an alle
Biber