derantiheld
Goto Top

Einfachen Gamelauncher erstellen via Batch (soll unter anderem Ordner umbenennen)

Hallo, ich habe ein relativ spezifisches Problem und wollte Fragen wie bzw ob es überhaupt via Batch zu lösen ist.

Ich habe bei einem Spiel die Möglichkeit gleichzeitig verschiedene, teilweise gemoddete Versionen auf dem PC zu haben. Nun gibt es jedoch das Problem, dass jede der Versionen unveränderbar auf den selben Standartordner zugreift der bei der Orginalversion für manche Konfigurations- und Spielstanddateien verwendet wird. Nun wollte ich einen kleinen Launcher schreiben welcher erstmal abfragt welche Version des Spiels ich den starten möchte (nur bin ich leider zu schlecht in Batch dafür). Das soll dann ungefähr so aussehen:
Welche Version von "Spielename" möchtest du starten?
1. "Version1"
2. "Version2"
3. "Version3"
Wenn man dann z.B. "1" in die Konsole eingibt, wird folgendes gemacht:

1. Es wird geprüft zu welcher Version der Standartordner gehört (z.B. über eine Textdatei die in jedem Ordner liegt und mit dem Spiel nichts zu tun hat)

2. Wenn der Ordner zur Ausgewählten Version gehört:
Weiter mit Schritt 4

3. Wenn der Ordner zu einer anderen Version gehört:
a) Umbenennen des Ordners und zwar durch Anhängen der Versionsnummer bzw Versionsbezeichnung
b) Checken nach dem Ordner mit der benötigten Version
c) Umbenennen dieses Ordners zum Standartodner

4. Starten des Spiels

Ich weiß ist viel aber genau deswegen bin ich ja zu schlecht für (kenn mich mit Batch sehr wenig aus)
Danke schonmal,
Anti
Kommentar vom Moderator Biber am May 10, 2011 um 11:35:12 Uhr
a) Umbennenen des Ordners und zwar durch Anhängen der Versionsnummer bzw Versionsbezeichnung
b) Checken nach dem Ordner mit der benötigten Version
c) Umbennenen dieses Ordners zum Standartodner
ennennennenn... *mööp*...*mööp*
Set /a rgc+=2
#753
Spielkinder halt...

Content-Key: 165978

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

Printed on: April 16, 2024 at 12:04 o'clock

Member: DerAntiheld
DerAntiheld May 10, 2011 at 13:16:44 (UTC)
Goto Top
So hab schonmal das "Grundinterface"
funktioniert alles bis Schritt 3
Dort weiß ich nicht weiter:
set Name=Spiel_Mod
for /Spiel %%i in ("C:\Users\MeinName\SpielLauncher") do rename !Name!
goto start
Ich möchte mit diesen Befehlen den Schritt 3a durchführen, jedoch geschieht nichts
könnt ihr mir da weiterhelfen?
EDIT: Ich sehe grade meine Abfrage ist auch völliger Schwachsinn, aber ich habs zumindest versucht ._.
Member: Skyemugen
Skyemugen May 10, 2011 at 13:21:02 (UTC)
Goto Top
Aloha,

autsch, au weia ... lies dir doch bitte einmal for /? sowie das Tutorial zur FOR-Schleife durch, das wird dir sicherlich erstmal vor Augen führen, was du versuchst anzurichten *gg*

greetz André

edit: Ist heute „Die-Gnade-Friemlers-day”? Mensch, der TE spielt mit gemoddeten Versionen, da muss doch etwas batchmodding auch selber gehen face-wink
Member: Friemler
Friemler May 10, 2011 at 13:23:15 (UTC)
Goto Top
Hallo DerAntiheld,

willkommen im Forum. Da ich gerade Zeit und Lust hatte, habe ich mich mal Deiner erbarmt. Normalerweise bekommt man auf die Anfrage nach solchen etwas umfangreicheren Scripten, ohne eigene Bemühungen zu zeigen, seltenst eine Antwort.

@echo off

setlocal enabledelayedexpansion


::Hier das Verzeichnis einstellen, in dem das Spiel seine Config speichert
set "GameConfigDir=E:\GameConfig"  

::Hier den Namen der Versionsdatei(en) einstellen
set "GameVersionFile=ActualVersion.txt"  

::Hier eine Liste von Versionsnamen festlegen. Falls die Namen Leerzeichen enthalten
::dann in Anführungszeichen einschließen
::Diese Versionsnamen müssen auch in die jeweiligen Versionsdateien eingetragen werden,
::aber ohne Anführungszeichen
set GameVersions="Version 1" "Version 2" "Version 3"  


::Dynamisches Menü erzeugen
:Menu
cls
set /a Version=0
set /a nVersions=0

echo Verwendbare Versionen:
echo.
for %%v in (%GameVersions%) do set /a "nVersions+=1" & echo   !nVersions!. %%~v  
echo.

<NUL set /p "=Welche Version möchtest du starten? A=Abbruch ("  
for /l %%i in (1,1,%nVersions%) do <NUL set /p "=%%i/"  
<NUL set /p "=A) "  

::Eingabe einlesen
set /p "Version="  

::Eingabe auswerten
if /i "%Version%" equ "A" exit /b  

set /a Version=%Version%
if %Version% lss 1 goto :Menu
if %Version% gtr %nVersions% goto :Menu


::Anhand des Index den Namen der ausgewählten Version ermitteln
set "SelectedVersion="  
set /a cntr=0
for %%v in (%GameVersions%) do set /a "cntr+=1" & if !cntr! equ %Version% set "SelectedVersion=%%~v"  


::Prüfen, ob das Konfigurationsverzeichnis des Spiels
::und in diesem die Versionsdatei vorhanden ist
if not exist "%GameConfigDir%" goto :ErrConfigDir  
if not exist "%GameConfigDir%\%GameVersionFile%" goto :ErrNoVersionFile  

::Aktuelle Version aus der Versionsdatei auslesen
set /p "ActualVersion=" < "%GameConfigDir%\%GameVersionFile%"  

::Prüfen, ob die Datei einen Inhalt hat
if "%ActualVersion%" equ "" goto :ErrEmptyVersionFile  

::Prüfen, ob die Versionsbezeichnung aus der Versionsdatei
::in der internen Liste der Versionsnamen enthalten ist
echo %GameVersions%|find /i "%ActualVersion%" > NUL || goto :ErrNonExistentVersion  


::Wenn aktueller und ausgewählter Versionsnamen identisch sind, Spiel starten
::Sonst Verzeichnisse umbenennen
if "%ActualVersion%" equ "%SelectedVersion%" (  
  goto :StartGame
) else (
  move "%GameConfigDir%" "%GameConfigDir% %ActualVersion%" > NUL  
  move "%GameConfigDir% %SelectedVersion%" "%GameConfigDir%" > NUL  
)


:StartGame
gameloader.exe

exit /b



::Fehlermeldungen ausgegben

:ErrConfigDir
echo.
echo Standardordner "%GameConfigDir%" nicht gefunden.  
exit /b


:ErrNoVersionFile
echo.
echo Versionsdatei "%GameConfigDir%\%GameVersionFile%" nicht gefunden.  
exit /b


:ErrEmptyVersionFile
echo.
echo Versionsdatei "%GameConfigDir%\%GameVersionFile%" ist leer.  
exit /b


:ErrNonExistentVersion
echo.
echo Die in der Versionsdatei "%GameConfigDir%\%GameVersionFile%"  
echo angeggebene Version "%ActualVersion%" existiert nicht in der  
echo internen Liste der Versionen: %GameVersions%
exit /b

Das Script ist dynamisch programmiert, also "wächst mit", wenn du in Zeile 16 weitere Versionsbezeichnungen einträgst.

Die Verzeichnisstruktur mit den verschiedenen Versionen müsste dann z.B. so aussehen (unter Verwendung der Beispielnamen aus dem Scriptcode):
E:\GameConfig
E:\GameConfig Version 2
E:\GameConfig Version 3
Alle diese Verzeichnisse müssten Dateien mit dem Namen ActualVersion.txt enthalten.
Die Datei E:\GameConfig\ActualVersion.txt müsste die Zeile Version 1 enthalten, E:\GameConfig Version 2\ActualVersion.txt die Zeile Version 2 usw.

Gruß
Friemler


[EDIT]
Bugfix in den Zeile 72 u. 73, s.u.
[/EDIT]
Member: DerAntiheld
DerAntiheld May 10, 2011 at 13:39:18 (UTC)
Goto Top
Ups Doppelpost =(
Member: DerAntiheld
DerAntiheld May 10, 2011 at 14:14:15 (UTC)
Goto Top
Danke vielmals, ich mache mich gleich daran daraus den Launcher zu erstellen =DD
Ich kann auf jeden Fall ordentlich was draus lernen über Batch
Dankee =)


Edit:
hmm ich habe alles eingetragen bis auf den Startbefehl des Spiels
Wenn ich jedoch die .bat via Doppelklick starte und z.B. 1 eingebe oder egal welche zahl beendet sie sich.
Wenn ich die .bat via cmd öffne und wieder eine Zahl eingebe kommt folgende fehlermeldung:
Syntaxfehler.
Syntaxfehler.
Der Befehl "gameloader.exe" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
letztere ist mir klar aber wo liegen die Syntaxfehler?
Member: Friemler
Friemler May 10, 2011 at 14:37:23 (UTC)
Goto Top
Hallo AntiHeld,

kommentiere mal das @echo off in der ersten Zeile aus und verfolge den Scriptlauf am Bildschirm (1. Regel beim Batch-Debugging). Dann kannst Du die Zeilen posten, die den/die Fehler verursachen.

Um Fehler beim Abtippen/Copy&Paste-Fehler zu vermeiden, kannst Du auf das Wort Quelltext am oberen rechten Rand der Box mit dem Script klicken. Der Code erscheint dann in einem neuen Fenster ohne Zeilennummern. In dieses Fenster klicken, CTRL+A (alles ist selektiert), dann CTRL+C (Code ist in der Zwischenablage). Dann ins Fenster eines Texteditors klicken, der Text in der ASCII-Codierung speichern kann (Codepage 850 oder OEM850 bei z.B. Notepad++) und mit CTRL+V einfügen.

Gruß
Friemler
Member: DerAntiheld
DerAntiheld May 10, 2011 at 14:49:39 (UTC)
Goto Top
Das mit dem Quelltext hab ich schon verstanden =p
aber danke
Das ist was ich dann bekomme wenn ich es über den cmd starte (habe hier 1 eingegeben)

C:\Users\"Mein Name"\FLLauncher>set /a Version=0

C:\Users\"Mein Name"\FLLauncher>set /a nVersions=0

C:\Users\"Mein Name"\FLLauncher>echo Verwendbare Versionen:
Verwendbare Versionen:

C:\Users\"Mein Name"\FLLauncher>echo.


C:\Users\"Mein Name"\FLLauncher>for %v in ("Version 1" "Version 2" "Version 3") do se
t /a "nVersions+=1" & echo !nVersions!. %~v

C:\Users\"Mein Name"\FLLauncher>set /a "nVersions+=1" & echo !nVersions!. Version
1
1. Version 1

C:\Users\"Mein Name"\FLLauncher>set /a "nVersions+=1" & echo !nVersions!. Version
2
2. Version 2

C:\Users\"Mein Name"\FLLauncher>set /a "nVersions+=1" & echo !nVersions!. Version
3
3. Version 3

C:\Users\"Mein Name"\FLLauncher>echo.


C:\Users\"Mein Name"\FLLauncher>set /p "=Welche Version moechtest du starten? A=Abbru
ch (" 0<NUL
Welche Version moechtest du starten? A=Abbruch (
C:\Users\"Mein Name"\FLLauncher>for /L %i in (1 1 3) do set /p "=%i/" 0<NUL

C:\Users\"Mein Name"\FLLauncher>set /p "=1/" 0<NUL
1/
C:\Users\"Mein Name"\FLLauncher>set /p "=2/" 0<NUL
2/
C:\Users\"Mein Name"\FLLauncher>set /p "=3/" 0<NUL
3/
C:\Users\"Mein Name"\FLLauncher>set /p "=A) " 0<NUL
A)
C:\Users\"Mein Name"\FLLauncher>set /p "Version="
1

C:\Users\"Mein Name"\FLLauncher>if /I "1" EQU "A" exit /b

C:\Users\"Mein Name"\FLLauncher>set /a Version=1

C:\Users\"Mein Name"\FLLauncher>if 1 LSS 1 goto :Menu

C:\Users\"Mein Name"\FLLauncher>if 1 GTR 3 goto :Menu

C:\Users\"Mein Name"\FLLauncher>set "SelectedVersion="

C:\Users\"Mein Name"\FLLauncher>set /a cntr=0

C:\Users\"Mein Name"\FLLauncher>for %v in ("Version 1" "Version 2" "Version 3") do se
t /a "cntr+=1" & if !cntr! EQU 1 set "SelectedVersion=%~v"

C:\Users\"Mein Name"\FLLauncher>set /a "cntr+=1" & if !cntr! EQU 1 set "SelectedVer
sion=Version 1"

C:\Users\"Mein Name"\FLLauncher>set /a "cntr+=1" & if !cntr! EQU 1 set "SelectedVer
sion=Version 2"

C:\Users\"Mein Name"\FLLauncher>set /a "cntr+=1" & if !cntr! EQU 1 set "SelectedVer
sion=Version 3"

C:\Users\"Mein Name"\FLLauncher>if not exist ""C:\Users\"Mein Name"\Documents\My Games\Fre
elancer"" goto :ErrConfigDir
Das System kann den angegebenen Pfad nicht finden.

C:\Users\"Mein Name"\FLLauncher>if not exist ""C:\Users\"Mein Name"\Documents\My Games\Fre
elancer"\"ActualVersion.txt"" goto :ErrNoVersionFile
Das System kann den angegebenen Pfad nicht finden.

C:\Users\"Mein Name"\FLLauncher>set "ActualVersion="

C:\Users\"Mein Name"\FLLauncher>for /F "usebackq delims=" %l in (""C:\Users\"Mein Name"\Do
cuments\My Games\Freelancer"\"ActualVersion.txt"") do set "ActualVersion=%l"
Die Datei ""C:\Users\"Mein Name"\Documents\My" kann nicht gefunden werden.

C:\Users\"Mein Name"\FLLauncher>if "" EQU "" goto :ErrEmptyVersionFile

C:\Users\"Mein Name"\FLLauncher>echo.


C:\Users\"Mein Name"\FLLauncher>echo Versionsdatei ""C:\Users\"Mein Name"\Documents\My Gam
es\Freelancer"\"ActualVersion.txt"" ist leer.
Versionsdatei ""C:\Users\"Mein Name"\Documents\My Games\Freelancer"\"ActualVersion.tx
t"" ist leer.

C:\Users\"Mein Name"\FLLauncher>exit /b
Member: Friemler
Friemler May 10, 2011 at 14:50:47 (UTC)
Goto Top
Hallo Antiheld,

die Fehler sind in Zeile 72 u. 73. Neue Zeilen 72 u.73:

  move "%GameConfigDir%" "%GameConfigDir% %ActualVersion%" > NUL
  move "%GameConfigDir% %SelectedVersion%" "%GameConfigDir%" > NUL

Kommt davon, wenn man nicht richtig testet... face-wink

Gruß
Friemler


[EDIT]
  1. In Deinem letzten Posting kommen andere Fehlermeldungen.
  2. Du hast Anführungszeichen in den Pfaden zu den Versionsdateien
  3. macht alles leserlicher.
[/EDIT]
Member: DerAntiheld
DerAntiheld May 10, 2011 at 14:58:33 (UTC)
Goto Top
Danke sehr =)
Es gibt noch ein Problem das ich jetzt festgestellt habe
Man muss bei schritt 4 noch zwischen den einzelnen Spieleordnern Unterscheiden da jede Mod bzw jede Version einen eigenen besitzt =S
Aber ich mach das jetzt folgendermaßen:
1. Ich starte deinen Launcher
2. Ich starte die jeweilige Game Version

Nur fals du wirklich noch bock hast würde ich dich fragen ob du die unterscheidung noch einbauen könntest, ansonsten geht es auch so =)
Member: Friemler
Friemler May 10, 2011 at 15:07:42 (UTC)
Goto Top
Hallo Antiheld,

wäre es jetzt nicht an der Zeit zu versuchen, etwas dazuzulernen face-wink ?

Schau Dir mal die Zeilen 16 und 46-48 an.

Um das Script weiterhin leicht erweiterbar zu halten, könntest Du einen String wie in Zeile 16 definieren, der die Pfade zu den verschiedenen Programmversionen in Anführungszeichen eingeschlossen enthält.

Mit einer Schleife wie in Zeile 48 kannst Du dann den zur eingegebenen Version passenden Programmpfad ermitteln.

Versuchs mal, ist nicht so schwer. Nur ein bisschen Geduld und Hirnschmalz erforderlich face-wink . Kannst ja mal Rückmeldung geben, ob es funktioniert hat.

Gruß
Friemler
Member: DerAntiheld
DerAntiheld May 10, 2011 at 15:51:10 (UTC)
Goto Top
Ich habe folgendes gemacht:
Ich habe eine (Variable? String?) namens "GameDir" (ähnlich deinem GameConfigDir) hinzugefügt in der ich den Standartpfad des Spiels definiert habe.
Ich habe unter :StartGame folgendes eingetragen:
start "" "%GameDir% %SelectedVersion%\EXE\Freelancer.exe"
Es funktioniert \o/
Member: Friemler
Friemler May 10, 2011 at 16:11:48 (UTC)
Goto Top
Zitat von @DerAntiheld:
Es funktioniert \o/

Meinen Glückwunsch! Zwar anders, als ich dachte aber einfacher und somit besser.

Gruß
Friemler