Supportnet / Forum / Anwendungen(Java,C++...)
WoW per batchdatei automatisieren
Frage
Hallo, ich spiele seit einer ganzen weile WoW auf einem Privatserver, da mit 13€ für nen offiziellen Server zu teuer ist. da der jetz ziemlich häufig abkackt, wollte ich was machen, um immer den aktuellen server zu haben:
im verzeichnis gibt es eine datei, die sich realmlist.wtf nennt, iin dieser datei legt man die serveradresse fest.
kann man eine batchdatei schreiben, die einen abfragt, auf welchem server man spielen möchte(bis hierher kein problem), anschließend die realmlist.wtf entleert(kein plan wie) und die neue adresse reinschreibt(kein plan wie)..
also meine eigentliche frage:
wie kann man via batchdatei den inhalt einer datei löschen/ersetzen?
Gruß Fabian
Antwort 1 von disco
moin
inhalt einer datei ersetzen:
echo dein_text > datei.txt
text an datei anfügen
echo dein_text >> datei.txt
g,
disco
inhalt einer datei ersetzen:
echo dein_text > datei.txt
text an datei anfügen
echo dein_text >> datei.txt
g,
disco
Antwort 2 von vcltester
Hallo Fabian,
vielleicht möchtest Du mal den Inhalt der Datei "
Wenn Du schon einen Teil der Batchdatei fertig hast, solltest Du die Mühe nicht scheuen, und den ebenfalls hier reinstellen...
Dann kann Dir vielleicht geholfen werden.
Einen schönen Nachmittag wünscht
vcltester
vielleicht möchtest Du mal den Inhalt der Datei "
realmlist.wtf " hier posten?Wenn Du schon einen Teil der Batchdatei fertig hast, solltest Du die Mühe nicht scheuen, und den ebenfalls hier reinstellen...
Dann kann Dir vielleicht geholfen werden.
Einen schönen Nachmittag wünscht
vcltester
Antwort 3 von Schamhorst
@echo off
set /p server=Auf welchem Server soll gespielt werden(1: beyond-wow, 2: gargamel-wow):
if %server%==1 (goto 1)
if %server%==2 (goto 2)
:1
echo set realmlist beyond.servegame.com>"K:\WoW\World of Warcraft\realmlist.wtf"
call "K:\WoW\World of Warcraft\WoW.exe"
:2
echo set realmlist realm.gargamel-wow.net>"K:\WoW\World of Warcraft\realmlist.wtf"
call "K:\WoW\World of Warcraft\WoW.exe"
so hab ich das jetz gemacht, jedoch pausiert er nach dem ersten call solange, bis ich wow beendet habe, dann wird zu punkt 2 übergegangen, wie kann ich der datei sagen, dass nach call wow.exe schluss ist, guibt es da einen befehl(stop) oder so
Gruß Fabian
set /p server=Auf welchem Server soll gespielt werden(1: beyond-wow, 2: gargamel-wow):
if %server%==1 (goto 1)
if %server%==2 (goto 2)
:1
echo set realmlist beyond.servegame.com>"K:\WoW\World of Warcraft\realmlist.wtf"
call "K:\WoW\World of Warcraft\WoW.exe"
:2
echo set realmlist realm.gargamel-wow.net>"K:\WoW\World of Warcraft\realmlist.wtf"
call "K:\WoW\World of Warcraft\WoW.exe"
so hab ich das jetz gemacht, jedoch pausiert er nach dem ersten call solange, bis ich wow beendet habe, dann wird zu punkt 2 übergegangen, wie kann ich der datei sagen, dass nach call wow.exe schluss ist, guibt es da einen befehl(stop) oder so
Gruß Fabian
Antwort 4 von Denkanstoßer
Hi, versuchs mal so:
@echo off
set /p server=Auf welchem Server soll gespielt werden(1: beyond-wow, 2: gargamel-wow):
if %server%==1 (goto 1)
if %server%==2 (goto 2)
:1
echo set realmlist beyond.servegame.com>"K:\WoW\World of Warcraft\realmlist.wtf"
:2
echo set realmlist realm.gargamel-wow.net>"K:\WoW\World of Warcraft\realmlist.wtf"
:3
call "K:\WoW\World of Warcraft\WoW.exe"
mfg
@echo off
set /p server=Auf welchem Server soll gespielt werden(1: beyond-wow, 2: gargamel-wow):
if %server%==1 (goto 1)
if %server%==2 (goto 2)
:1
echo set realmlist beyond.servegame.com>"K:\WoW\World of Warcraft\realmlist.wtf"
:2
echo set realmlist realm.gargamel-wow.net>"K:\WoW\World of Warcraft\realmlist.wtf"
:3
call "K:\WoW\World of Warcraft\WoW.exe"
mfg
Antwort 5 von Denkanstoßer
Korrektur:
@echo off
set /p server=Auf welchem Server soll gespielt werden(1: beyond-wow, 2: gargamel-wow):
if %server%==1 (goto 1)
if %server%==2 (goto 2)
:1
echo set realmlist beyond.servegame.com>"K:\WoW\World of Warcraft\realmlist.wtf"
goto 3
:2
echo set realmlist realm.gargamel-wow.net>"K:\WoW\World of Warcraft\realmlist.wtf"
:3
call "K:\WoW\World of Warcraft\WoW.exe"
mfg
@echo off
set /p server=Auf welchem Server soll gespielt werden(1: beyond-wow, 2: gargamel-wow):
if %server%==1 (goto 1)
if %server%==2 (goto 2)
:1
echo set realmlist beyond.servegame.com>"K:\WoW\World of Warcraft\realmlist.wtf"
goto 3
:2
echo set realmlist realm.gargamel-wow.net>"K:\WoW\World of Warcraft\realmlist.wtf"
:3
call "K:\WoW\World of Warcraft\WoW.exe"
mfg
Antwort 6 von Schamhorst
es funzt, danke!!!!
Gruß fabian
Gruß fabian
Antwort 7 von Schamhorst
noch eine frage:
wie kann ich einen Zeilenumbruch setzen?
das es dann so aussieht
Auf welchem Server soll gespielt werden?
1-Beyond-wow
2-Gargamel
(hier soll dann der cursor sein)
Gruß fabian
wie kann ich einen Zeilenumbruch setzen?
das es dann so aussieht
Auf welchem Server soll gespielt werden?
1-Beyond-wow
2-Gargamel
(hier soll dann der cursor sein)
Gruß fabian
Antwort 8 von batti-batch
Hallo Fabian,
ich habe mir Deine Batch-Datei mal angeschaut und ein paar Änderungen vorgenommen.
(1) Dateiname und Pfad des Spiels und der *.wtf-Datei sowie die Einträge für die *.wtf-Datei sind nun im
(2) Die Beschriftung der Eingabeaufforderung ist nun mehrzeilig. Eingaben, die nicht den Vorgaben 1, 2 oder E entsprechen, werden abgewiesen und das Programm kehrt wieder zur Sprungmarke :start und damit zur Eingabe zurück. Die Eingabe von mehr als einem Steuer- oder Befehlszeichen (z.B. < oder > ) kann hier allerdings nicht abgefangen werden.
(3) das Batchprogramm wird nach Start des Spiels oder durch Drücken der Taste "E" beendet.
(4) Für die Sprungmarken und Variablen habe ich zur Erleichterung späterer Anpassungen sprechende Namen verwendet.
(5) das Programm ist hinsichtlich des Starts von World of Warcraft nicht gestestet.
Hier nun das vollständige Programm:
Viel Spaß beim Testen.
Herzliche Grüße
batti-batch
ich habe mir Deine Batch-Datei mal angeschaut und ein paar Änderungen vorgenommen.
(1) Dateiname und Pfad des Spiels und der *.wtf-Datei sowie die Einträge für die *.wtf-Datei sind nun im
SET-Block untergebracht, das erleichtert spätere Anpassungen.(2) Die Beschriftung der Eingabeaufforderung ist nun mehrzeilig. Eingaben, die nicht den Vorgaben 1, 2 oder E entsprechen, werden abgewiesen und das Programm kehrt wieder zur Sprungmarke :start und damit zur Eingabe zurück. Die Eingabe von mehr als einem Steuer- oder Befehlszeichen (z.B. < oder > ) kann hier allerdings nicht abgefangen werden.
(3) das Batchprogramm wird nach Start des Spiels oder durch Drücken der Taste "E" beendet.
(4) Für die Sprungmarken und Variablen habe ich zur Erleichterung späterer Anpassungen sprechende Namen verwendet.
(5) das Programm ist hinsichtlich des Starts von World of Warcraft nicht gestestet.
Hier nun das vollständige Programm:
@ECHO off
SETLOCAL
REM
REM Testprogramm
REM Start des Spiels "World of Warcraft"
REM von zwei verschiedenen Servern
REM
REM https://supportnet.de/threads/1638134
REM
REM batti-batch 20.11.2007
REM
REM Batch lauffaehig ab Window 2000
REM
SET "wtf_datei=K:\WoW\World of Warcraft\realmlist.wtf"
SET "spiel=K:\WoW\World of Warcraft\WoW.exe"
SET "beyond_option=set realmlist beyond.servegame.com"
SET "gargamel_option=set realmlist realm.gargamel-wow.net"
:start
CLS
ECHO Auf welchem Server moechten Sie spielen?
ECHO.
ECHO 1 = beyond-wow 2 = gargamel-wow E = Ende
ECHO.
SET /p server=Bitte Ihre Eingabe:
IF [^%server%] EQU [1] GOTO :beyond
IF [^%server%] EQU [2] GOTO :gargamel
IF [^%server%] EQU [E] GOTO :ende
GOTO :start
:beyond
ECHO %beyond_option%>%wtf_datei%
GOTO :spiel
:gargamel
ECHO %gargamel_option%>%wtf_datei%
:spiel
START /wait %spiel%&EXIT
:ende
EXITViel Spaß beim Testen.
Herzliche Grüße
batti-batch
Antwort 9 von Schamhorst
wow, danke
, ich habe da aber nochmal ne frage:
wofür steht EQU?
und wait %spiel$ bedeutet, dass solange nichts getan wird, bis die datei, welche durch %spiel% definiert wird getratet wird? anschließend exit. is klar.
Mein Ego erlaubt mir nicht, die abzuschreiben, ich hab mir das jetz mal angeschaut und versuch das allein^^
Gruß Fabian
, ich habe da aber nochmal ne frage:
wofür steht EQU?
und wait %spiel$ bedeutet, dass solange nichts getan wird, bis die datei, welche durch %spiel% definiert wird getratet wird? anschließend exit. is klar.
Mein Ego erlaubt mir nicht, die abzuschreiben, ich hab mir das jetz mal angeschaut und versuch das allein^^
Gruß Fabian
Antwort 10 von batti-batch
Hallo Fabian,
"
Der Befehl
Herzliche Grüße
batti-batch
"
EQU" ist ein Vergleichsoperator und bedeutet "equal", also "gleich" und ist in seiner Bedeutung identisch mit "==".Der Befehl
START mit der Option /wait startet eine Anwendung und wartet auf deren Ende. Der nachfolgende Befehl EXIT beendet sowohl die Batchdatei als auch die Instanz des Kommandozeileninterpreters.Herzliche Grüße
batti-batch
Antwort 11 von Schamhorst
kann man den wait befehl auch iwie für eine zeitverzögerung nutzen
(wait 10) oder so? hat jetz nich viel mit dem Programm zu tun, ist eher so im allgemeinen
Gruß Fabian
(wait 10) oder so? hat jetz nich viel mit dem Programm zu tun, ist eher so im allgemeinen
Gruß Fabian
Antwort 12 von batti-batch
Hallo Fabian,
bei Deiner Frage handelt es sich nicht um den
Leider ist es mit dieser Option nicht möglich, eine Zeitverzögrung einzubauen.
Es wird besser sein, zum Thema "Zeitverzögrung in einer Batch-Datei" ein extra Thema aufzumachen, da es ansonsten zu weit vom eigentlichen Problem wegführt.
Herzliche Grüße
batti-batch
bei Deiner Frage handelt es sich nicht um den
WAIT-Befehl, sondern um die Option /wait des START-Befehls.Leider ist es mit dieser Option nicht möglich, eine Zeitverzögrung einzubauen.
Es wird besser sein, zum Thema "Zeitverzögrung in einer Batch-Datei" ein extra Thema aufzumachen, da es ansonsten zu weit vom eigentlichen Problem wegführt.
Herzliche Grüße
batti-batch
Antwort 13 von Schamhorst
nja gut.
aber noch was, was auch was der überschrift zu tun hat:
also:
ich möchte eine batchdatei erstellen, welche nach dem verzeichnis zur WoW.exe fragt. dieses verzweichnis soll anschließend unter %systemdrve% abgelegt werden. da das alles nicht so einfach scheint, habe ich vor mehrere Batchdateien zu machen, die durch einen converter alle zusammengepackt wwerden.
und zwar so:
batchdatei 1:
erstellt ein textdokument auf %systemdrive%
fragt nach dem WoW-verzeichnis(geht das auch graphisch?)
kopiert batchdatei 2 ins angegebene verzeichnis
erstellt eine start-batch-datei auf dem desktop
löscht sich anschließend selber(das wird schwer, oder?)
die start batch datei ließt nun den Pfad aus der Textdatei aus und startet die batchdatei2
nja, was ich eigentlich wiisen möchte:
wie kann ich den inhalt einer datei auslesen und der variable %pfad% zuordnen?
kann man zur angabe des pfades auch sowas wie "graphisch Browsen" verwenden?
Gruß Fabian
aber noch was, was auch was der überschrift zu tun hat:
also:
ich möchte eine batchdatei erstellen, welche nach dem verzeichnis zur WoW.exe fragt. dieses verzweichnis soll anschließend unter %systemdrve% abgelegt werden. da das alles nicht so einfach scheint, habe ich vor mehrere Batchdateien zu machen, die durch einen converter alle zusammengepackt wwerden.
und zwar so:
batchdatei 1:
erstellt ein textdokument auf %systemdrive%
fragt nach dem WoW-verzeichnis(geht das auch graphisch?)
kopiert batchdatei 2 ins angegebene verzeichnis
erstellt eine start-batch-datei auf dem desktop
löscht sich anschließend selber(das wird schwer, oder?)
die start batch datei ließt nun den Pfad aus der Textdatei aus und startet die batchdatei2
nja, was ich eigentlich wiisen möchte:
wie kann ich den inhalt einer datei auslesen und der variable %pfad% zuordnen?
kann man zur angabe des pfades auch sowas wie "graphisch Browsen" verwenden?
Gruß Fabian
Antwort 14 von Schamhorst
ich hab schon wieder ne andere idee:
1.wie erstelle ich eine datei?(mit batch)
2.wie kann ich den inhalt einer datei auslesen?
3.Wie kann ich einen Pfad graphisch auswählen?
Gruß Fabian
1.wie erstelle ich eine datei?(mit batch)
2.wie kann ich den inhalt einer datei auslesen?
3.Wie kann ich einen Pfad graphisch auswählen?
Gruß Fabian
Antwort 15 von disco
moin
mit batch kannst du keine datei grafisch auswählen.
ist es dem user nicht zuzumuten den pfad seine wow.exe selbst (ggf. in ein configfile) einzutragen?
g,
disco
mit batch kannst du keine datei grafisch auswählen.
ist es dem user nicht zuzumuten den pfad seine wow.exe selbst (ggf. in ein configfile) einzutragen?
g,
disco
Antwort 16 von Schamhorst
jah, kann man schon machen, aber ich wollt es für die anderen so einfach wie möglich machen.
ok, bleiben noch 2 fragen:
1.Dateiinhalt auslesen und in variable machen
2. neue datei erstellen
Gruß fabian
ok, bleiben noch 2 fragen:
1.Dateiinhalt auslesen und in variable machen
2. neue datei erstellen
Gruß fabian
Antwort 17 von batti-batch
Hallo Fabian,
graphische Dinge lassen sich mit einer Batch nicht erledigen. Solche Sachen sind anderen Programmierumgebungen vorbehalten.
Das Auslesen einer (einzeiligen!) .txt-Datei und die Speicherung in der Variablen "pfad" lässt sich einfach bewerkstelligen:
Viel Spass beim Testen.
Herzliche Grüße
batti-batch
graphische Dinge lassen sich mit einer Batch nicht erledigen. Solche Sachen sind anderen Programmierumgebungen vorbehalten.
Das Auslesen einer (einzeiligen!) .txt-Datei und die Speicherung in der Variablen "pfad" lässt sich einfach bewerkstelligen:
@ECHO off
SETLOCAL enabledelayedexpansion
REM
REM Testprogramm
REM Auslesen einer einzeiligen .txt-Datei
REM Speicherung des Ergebnisses
REM in der Variable "pfad"
REM
REM https://supportnet.de/threads/1638134
REM
REM (c) batti-batch
REM
REM erstellt am 21.11.2007
REM
REM Batch lauffaehig ab Windows 2000
REM
SET "quell_datei=Dateiname incl. Laufwerk und Pfad"
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (
SET pfad=%%i
ECHO !pfad!
)Viel Spass beim Testen.
Herzliche Grüße
batti-batch
Antwort 18 von Schamhorst
danke schön, aber geht das nicht einfacher? ich versteh nämlcih rein gar nichts. mit dem for befehl macht man den auslesevorgang doch für jede variable, oder?
z.b. Was heißt delims?
oder %%i?
oder /f
xD
Kannst du das mal bitte noch erläutern?
Dankeschön
Gruß fabian
z.b. Was heißt delims?
oder %%i?
oder /f
xD
Kannst du das mal bitte noch erläutern?
Dankeschön
Gruß fabian
Antwort 19 von batti-batch
Hallo Fabian,
das Auslesen einer .txt-Datei mit einer
Die Funktion ist zwar nicht unbedingt trivial, aber wenn man sich einmal daran gewöhnt hat, mag man sie nicht mehr missen. Eine andere Wahl bleibt ohnehin nicht, da es kein anderes Werkzeug vergleichbarer Mächtigkeit in nativem Batch gibt.
Schauen wir uns die
Die Betrachtung beginnt in diesem Fall immer beim Ausdruck in den Klammern, in unserem Beispiel also bei
Der
Der Teil links vom Klammerausdruck
ermöglicht uns die Verarbeitung.
Der Teil rechts vom Klammerausdruck
ist hier der wegen der Übersichtlichkeit in mehrere Zeilen geschrieben und entspricht
Weil nach dem "
Zunächst wird mit
der Variablen "pfad" der Wert der Zählvariablen
Der zweite Schritt gibt uns die Variable "pfad" am Bildschirm aus:
Auffallend ist hier die andere Schreibweise; die sonst eigentlich üblichen Prozentzeichen "%" sind durch Ausrufezeichen "!" ersetzt.
Das hat mit einer Eigenwilligkeit der
Damit diese Sache wie gewünscht funktioniert, muss man der
in der zweiten Zeile meines Programmbeispiels "Auslesen einer einzeiligen .txt-Datei" erledigt das.
Weitere interessante Tipps findest Du in den Hilfen zu
Herzliche Grüße
batti-batch
das Auslesen einer .txt-Datei mit einer
FOR-Schleife geht wirklich sehr einfach.Die Funktion ist zwar nicht unbedingt trivial, aber wenn man sich einmal daran gewöhnt hat, mag man sie nicht mehr missen. Eine andere Wahl bleibt ohnehin nicht, da es kein anderes Werkzeug vergleichbarer Mächtigkeit in nativem Batch gibt.
Schauen wir uns die
FOR-Schleife also genauer an.FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (
SET pfad=%%i
ECHO !pfad!
)Die Betrachtung beginnt in diesem Fall immer beim Ausdruck in den Klammern, in unserem Beispiel also bei
('FINDSTR . "%quell_datei%"')Der
FINDSTR-Befehl sucht nach bestimmten Zeichen(folgen) in einer Datei. Die Option "." (Punkt) steht hier als Wildcard für "alle Zeichen". Über diesen Weg werden alle Zeichen einer Datei zeilenweise ausgegeben.Der Teil links vom Klammerausdruck
FOR /f "delims=" %%i INermöglicht uns die Verarbeitung.
FOR /f lässt die Angabe von Befehlen und Dateien innerhalb der Klammer zu. Die Option "delims=" unterdrückt jede Art von Trennzeichen in der Ausgabe. Die Zählvariable %%i ist diejenige Variable, in die das Ergebnis geschrieben wird. "IN" verbindet den linken Teil mit dem Klammerausdruck.Der Teil rechts vom Klammerausdruck
DO (
SET pfad=%%i
ECHO !pfad!
)ist hier der wegen der Übersichtlichkeit in mehrere Zeilen geschrieben und entspricht
DO (SET pfad=%%i&ECHO !pfad!)Weil nach dem "
DO" mehr als ein Befehl folgt, müssen hier Klammern verwendet werden.Zunächst wird mit
SET pfad=%%ider Variablen "pfad" der Wert der Zählvariablen
%%i zugewiesen. Der zweite Schritt gibt uns die Variable "pfad" am Bildschirm aus:
ECHO !pfad!Auffallend ist hier die andere Schreibweise; die sonst eigentlich üblichen Prozentzeichen "%" sind durch Ausrufezeichen "!" ersetzt.
Das hat mit einer Eigenwilligkeit der
FOR-Schleife zu tun, bei deren Aufruf SOFORT sämtliche Variablen gesetzt werden. Das geht aber in unserem Fall nicht, da ERST die Variable "pfad" mit dem Wert von %%i gefüllt wird und DANACH die Ausgabe am Bildschirm erfolgt.Damit diese Sache wie gewünscht funktioniert, muss man der
FOR-Schleife diese verzögerte Variablenauflösung beibringen:SETLOCAL enabledelayedexpansionin der zweiten Zeile meines Programmbeispiels "Auslesen einer einzeiligen .txt-Datei" erledigt das.
Weitere interessante Tipps findest Du in den Hilfen zu
SETLOCAL, FINDSTR und FOR.Herzliche Grüße
batti-batch
Antwort 20 von Schamhorst
omg......
Bist mir eine Echte Hilfe!
Eine letzte Frage noch:
Wie kann ich eine Datei mit dem Namen test.bat erstellen?
Gruß fabian
Bist mir eine Echte Hilfe!
Eine letzte Frage noch:
Wie kann ich eine Datei mit dem Namen test.bat erstellen?
Gruß fabian
Antwort 21 von Schamhorst
.....nochmal nach oben......
Antwort 22 von hst-de
also auslesen (EINZEILIG) hab ich auch einfacher geschaft
er liest die erste zeile der datei test.txt aus, speichert sie in der variable 'a' und gibt sie dann wieder aus.
das 'pause>nul' steht hier damit er nicht schreibt "drücken Sie eine belie...."
um den inhald der datei nicht in einer variablen zu speichern und gleich aus geben zu lassen reicht
um in eine datei zu schreiben reicht
dabei wird der gesamte inhald der datei gelöscht
um etwas an den inhalt ranzuhängen schreibt man
mfG
hst-de
@echo off
set /p a=<test.txt
echo %a%
pause>nul
er liest die erste zeile der datei test.txt aus, speichert sie in der variable 'a' und gibt sie dann wieder aus.
das 'pause>nul' steht hier damit er nicht schreibt "drücken Sie eine belie...."
um den inhald der datei nicht in einer variablen zu speichern und gleich aus geben zu lassen reicht
@ECHO OFF
MORE < test.txt
PAUSE>NUL
um in eine datei zu schreiben reicht
@ECHO OFF
echo hallo>test.txt
PAUSE>NUL
dabei wird der gesamte inhald der datei gelöscht
um etwas an den inhalt ranzuhängen schreibt man
@ECHO OFF
echo hallo>>test.txt
PAUSE>NUL
mfG
hst-de

