Zeichenkette Suchen und als Dateinamen verwenden, Ordner umbenennen und entpacken )
Es sollten Textteile aus multiplen LOG_*.txt und Config_*.txt ausgelesen werden, die dann in der generierten Datei im Dateinamen und im Header auftauchen sollen - dannach werden die Files noch auf Zeilen inhalte gescant und mit angabe der Zeilennummer und Ursprung, also dateiname in der neuen Datei ausgegeben
[{STEAM}\steamapps\{STEAMACCOUNT}\counter-strike\cstrike\config.cfg]
brightness "1"
cl_himodels "0"
cl_idealpitchscale "0.8"
fastsprites "0"
fps_max "1000"
fps_modem "0"
gamma "3"
gl_fog "1"
gl_monolights "0"
gl_overbright "0"
gl_polyoffset "4"
s_a3d "0.0"
s_doppler "0.0"
s_eax "0.0"
[/{STEAM}\steamapps\{STEAMACCOUNT}\counter-strike\cstrike\config.cfg]
ESL Aequitas Anti-Cheat Logfile
Created: 22.06.2006 23:23:16
---
Log:
22.06.2006 22:13:08 - Received Player Info: Spieler Name (ID: 123456)
22.06.2006 22:14:24 - Started Monitoring - Matchlink: http://www.esl.eu/de/cs/3on3/ladder/match/6543221/
22.06.2006 22:14:27 - CS is already running - Path: e:\steam\steamapps\siegeszug2000@gmx.de\counter-strike\hl.exe
22.06.2006 22:18:57 - SteamID: 0:0:987423 (Note: this value might be not correct!)
22.06.2006 22:18:57 - Command Line Parameters found: +ip_clientport 27007 -noforcemaccel -noforcemparms -noforcemspd
22.06.2006 22:18:57 - Color Depth Settings: 16bpp
22.06.2006 23:13:51 - Screenshot -> O31iU19afFttaSlmPDNHSGpoV04xKUVcN2h4Q0c4fTE=.bmp (Timing: 187)
22.06.2006 23:22:35 - Configfile(s) has been changed -> CONFIG_OFJjJjVcTVpuZSxeP2FHeWdsIn1eXHlZMzt1SHllIl0=.txt
22.06.2006 23:22:36 - sent data to the ESL
22.06.2006 23:22:37 - WARNING: Application started during the Match - C:\Programme\ATI Technologies\ATI.ACE\cli.exe (pid: 5484) - MD5: 64c4c17bf6a40ff1cd21205e6fd415b8 - Size: 44kb
22.06.2006 23:22:56 - monitoring has been stopped properly
22.06.2006 23:22:56 - This message is used for some optimations! Don't ask me questions about it! ovar=NjN8NTE5MjJ8MHwyNzQ0MDBmYjdlM2E5MTliMmIwN2MzYzlmNDBkNWYzZHwwfEVTTCBBZXF1aXRhcyAtIFN0ZWFtIFZlcnNpb24gKkJFVEEq
22.06.2006 23:23:16 - Bitmap has been converted: ZX1kU2RcfCg7Y1lkP15zfWVmIyFcKElUN2tGQ3M6fC4=.bmp > OE9iJDUsUSw6ZVhgcVxwTDg7JnxkV0dbNW93SHdoTmE=.jpg
---
Replaylisting:
2006-06-22-3on3-schlaeger1.dem - 37169,05kb - MD5 Checksum: a22bfc7f62a3974724f242b04d8995f9
2006-06-22-3on3-schlaeger2.dem - 33478,56kb - MD5 Checksum: 7dffbe9e5e7b9d0b2e25b250edae3b78
lesen die entsprechenden daten aus
for /f "tokens=2,4 delims=- " %a in ('findstr "SteamID" log*.txt') do (set steamid=%b)
for /f "tokens=2,6,7,8 delims=- " %a in ('findstr "Info" log*.txt') do (set nameusteamid=%b %c %d)
for /f "tokens=2,6 delims=- " %a in ('findstr "Info" log*.txt') do (set name=%b)
for /f "tokens=2,6 delims=- " %a in ('findstr "Matchlink" log*.txt') do (set match=%b) gibt alles mit hhtp:blabl/match/$ID$/ aus, besser wär aber nur die $ID$
suchen in den daten nach den auffälligen sachen und schreiben sie in die entsprechenden dateien nieder
findstr /I /N "Player Matchlink SteamID Depth" log*.txt >> %match%-%name%.txt wenn das wie oben nicht geht mit match ID, dann nur name
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" con*.txt >> %match%-%name%.txt
die entstehenden txt dateien am besten wieder ins obere verzeichnis
so das zu jedem ordner/zip archiv - dann eine text datei vorhanden ist
So in etwa sieht die gegebene config_762391231274=.txt aus
[{STEAM}\steamapps\{STEAMACCOUNT}\counter-strike\cstrike\config.cfg]
brightness "1"
cl_himodels "0"
cl_idealpitchscale "0.8"
fastsprites "0"
fps_max "1000"
fps_modem "0"
gamma "3"
gl_fog "1"
gl_monolights "0"
gl_overbright "0"
gl_polyoffset "4"
s_a3d "0.0"
s_doppler "0.0"
s_eax "0.0"
[/{STEAM}\steamapps\{STEAMACCOUNT}\counter-strike\cstrike\config.cfg]
Die LOG_8034612986323=.txt in etwa so
ESL Aequitas Anti-Cheat Logfile
Created: 22.06.2006 23:23:16
---
Log:
22.06.2006 22:13:08 - Received Player Info: Spieler Name (ID: 123456)
22.06.2006 22:14:24 - Started Monitoring - Matchlink: http://www.esl.eu/de/cs/3on3/ladder/match/6543221/
22.06.2006 22:14:27 - CS is already running - Path: e:\steam\steamapps\siegeszug2000@gmx.de\counter-strike\hl.exe
22.06.2006 22:18:57 - SteamID: 0:0:987423 (Note: this value might be not correct!)
22.06.2006 22:18:57 - Command Line Parameters found: +ip_clientport 27007 -noforcemaccel -noforcemparms -noforcemspd
22.06.2006 22:18:57 - Color Depth Settings: 16bpp
22.06.2006 23:13:51 - Screenshot -> O31iU19afFttaSlmPDNHSGpoV04xKUVcN2h4Q0c4fTE=.bmp (Timing: 187)
22.06.2006 23:22:35 - Configfile(s) has been changed -> CONFIG_OFJjJjVcTVpuZSxeP2FHeWdsIn1eXHlZMzt1SHllIl0=.txt
22.06.2006 23:22:36 - sent data to the ESL
22.06.2006 23:22:37 - WARNING: Application started during the Match - C:\Programme\ATI Technologies\ATI.ACE\cli.exe (pid: 5484) - MD5: 64c4c17bf6a40ff1cd21205e6fd415b8 - Size: 44kb
22.06.2006 23:22:56 - monitoring has been stopped properly
22.06.2006 23:22:56 - This message is used for some optimations! Don't ask me questions about it! ovar=NjN8NTE5MjJ8MHwyNzQ0MDBmYjdlM2E5MTliMmIwN2MzYzlmNDBkNWYzZHwwfEVTTCBBZXF1aXRhcyAtIFN0ZWFtIFZlcnNpb24gKkJFVEEq
22.06.2006 23:23:16 - Bitmap has been converted: ZX1kU2RcfCg7Y1lkP15zfWVmIyFcKElUN2tGQ3M6fC4=.bmp > OE9iJDUsUSw6ZVhgcVxwTDg7JnxkV0dbNW93SHdoTmE=.jpg
---
Replaylisting:
2006-06-22-3on3-schlaeger1.dem - 37169,05kb - MD5 Checksum: a22bfc7f62a3974724f242b04d8995f9
2006-06-22-3on3-schlaeger2.dem - 33478,56kb - MD5 Checksum: 7dffbe9e5e7b9d0b2e25b250edae3b78
Den Teil der neuen Batch datei die alles generieren soll habe ich so weit - drin enthalten sind nochmal erklärungen und anweiseung, da ich net weiss wie man bei batch kommentiert hab ichs mit gemacht 
Evtl könnt ihr mir Tipps geben oder das mal vervollständigen. - am Wichtigsten ist das mit dem Dateinamen für die txt datei, entpacken und das mit den Ordnern is net so wichtig
lesen die entsprechenden daten aus
for /f "tokens=2,4 delims=- " %a in ('findstr "SteamID" log*.txt') do (set steamid=%b)
for /f "tokens=2,6,7,8 delims=- " %a in ('findstr "Info" log*.txt') do (set nameusteamid=%b %c %d)
for /f "tokens=2,6 delims=- " %a in ('findstr "Info" log*.txt') do (set name=%b)
for /f "tokens=2,6 delims=- " %a in ('findstr "Matchlink" log*.txt') do (set match=%b) gibt alles mit hhtp:blabl/match/$ID$/ aus, besser wär aber nur die $ID$
suchen in den daten nach den auffälligen sachen und schreiben sie in die entsprechenden dateien nieder
findstr /I /N "Player Matchlink SteamID Depth" log*.txt >> %match%-%name%.txt wenn das wie oben nicht geht mit match ID, dann nur name
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" con*.txt >> %match%-%name%.txt
dazu wär net schlecht wenn die batch alle *.zip files im gleichen verzeichnis entpackt, und zwar in einen order mit dem gleichen namen wie das zip archive, den ordner benennt es nachher um - gleiche name wie die textdatei die erzeugt wird
dann könnte die datei halt auf alle files in den jeweiligen ordnern angewendet werdendie entstehenden txt dateien am besten wieder ins obere verzeichnis
so das zu jedem ordner/zip archiv - dann eine text datei vorhanden ist
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 34709
Url: https://administrator.de/forum/zeichenkette-suchen-und-als-dateinamen-verwenden-ordner-umbenennen-und-entpacken-34709.html
Ausgedruckt am: 29.04.2025 um 09:04 Uhr
6 Kommentare
Neuester Kommentar
Moin AlexBart,
ein kleiner Optimierungsvorschlag vorab:
...aber bevor wir weitermachen, müssen wir erstmal den Prozess geraderücken.
So, wie Dein Ablauf jetzt ist, durchpflügst Du mit den "FOR /F ...FindStr...." -Zeilen jedes Mal alle Log*.-Dateien.
Es werden da keine, eine oder viele Trefferzeilen gefunden mit Deinen Suchkriterien.
Von denen landet aber nur die letzte gefundene Zeile in der jeweiligen Variablen. Alle 136 vorher gefundenen Trefferzeilen gehen Dir verloren.
Du musst also je gefundener Zeile die Variable setzen und auch gleich verarbeiten, sonst wird das nix.
Also [Beispiel im Batch]
Anmerkung:
- Im Batch bei Zählvariablen immer "%%" statt "%" vor dem Var-Namen.
- Kommentare im Batch eigentlich nur für gesamte Zeile, d.h. Zeile beginnt mit
- ODER (not recommended) Kommentar am Zeilenende
Gruß
Biber
ein kleiner Optimierungsvorschlag vorab:
>for /f "tokens=2,6 delims=- " %a in ('findstr "Matchlink" cslog*.txt') do @echo set match=%b
set match=http://www.esl.eu/de/cs/3on3/ladder/match/6543221/
>for /f "tokens=2,13 delims=-/ " %a in ('findstr "Matchlink" cslog*.txt') do @echo set match=%b
set match=6543221
...aber bevor wir weitermachen, müssen wir erstmal den Prozess geraderücken.
So, wie Dein Ablauf jetzt ist, durchpflügst Du mit den "FOR /F ...FindStr...." -Zeilen jedes Mal alle Log*.-Dateien.
Es werden da keine, eine oder viele Trefferzeilen gefunden mit Deinen Suchkriterien.
Von denen landet aber nur die letzte gefundene Zeile in der jeweiligen Variablen. Alle 136 vorher gefundenen Trefferzeilen gehen Dir verloren.
Du musst also je gefundener Zeile die Variable setzen und auch gleich verarbeiten, sonst wird das nix.
Also [Beispiel im Batch]
....
for /f "tokens=2,13 delims=-/ " %%a in ('findstr "Matchlink" log*.txt') do call :ProcessMatch %%a %%b
:ProcessMatch Para1=Zeit Para2=$ID$
Echo %1 %2 blabla >>c:\analyze\MyExtract.txt
:: sonstige Dinge, die Du mit %zeit% und %$ID$% tun willst...
goto :eof
Anmerkung:
- Im Batch bei Zählvariablen immer "%%" statt "%" vor dem Var-Namen.
- Kommentare im Batch eigentlich nur für gesamte Zeile, d.h. Zeile beginnt mit
REM kommentar oder
:: anderer kommentar
(echo Hier ein Batchbefehl und danach ein Kommentar) && Rem Zeilenendekommentar
Gruß
Biber
Moin Alexbart,
na, das nimmt ja doch langsam Formen an..
Also:
Würde ich (auch wegen der Les- und Wartbarkeit) so machen:
Noch ein paar Tipps bzw. Fussangeln (die leicht untergehen sonst):
- Achte auf die Sprungmarken. Im Batch ist die Schreibweise
:LabelX
Dahin springen mit
goto LabelX
Den LabelX-Block rufen und zurückkehren mit
call :LabelX
> dann muss aber der Block :LabelX eine Abschlusszeile haben:
goto :eof
~~~~~~~~~
So etwas ist fehlerträchtig:
Besser einheitlich so:
Set Thisfile="%match%%gname%.txt"
echo final Configfile:>>%ThisFile%
> und keine "ästhetischen" Leerzeichen vor oder nach oder zwischen den ">" lassen!
> Es sei denn, die Leerzeichen sollen auch wirklich mit in die Zieldatei.
Gruß
Biber
na, das nimmt ja doch langsam Formen an..
Also:
::hier ist dann auch erstmal das problem, if datei existiert wähle entweder find1 oder
find2 - und wie macht man es das er nach find1 nicht bei find 2 weitermacht? - :eof?
find2 - und wie macht man es das er nach find1 nicht bei find 2 weitermacht? - :eof?
Würde ich (auch wegen der Les- und Wartbarkeit) so machen:
if exist %cname% goto find1
if exist %cname2% goto find2
:find1
echo ....
..
REM Ende des Blocks "find1"
goto :ansEnde
:find2
....(bla)...
REM Ende des Blocks Find2
:ansEnde
REM hier allgemeine Aufräumarbeiten, falls nötig..
...(bla)...
::----endOf CheatHunter.bat
Noch ein paar Tipps bzw. Fussangeln (die leicht untergehen sonst):
- Achte auf die Sprungmarken. Im Batch ist die Schreibweise
:LabelX
Dahin springen mit
goto LabelX
Den LabelX-Block rufen und zurückkehren mit
call :LabelX
> dann muss aber der Block :LabelX eine Abschlusszeile haben:
goto :eof
~~~~~~~~~
So etwas ist fehlerträchtig:
echo final Configfile: >> "%match%%gname%.txt"
Besser einheitlich so:
Set Thisfile="%match%%gname%.txt"
echo final Configfile:>>%ThisFile%
> und keine "ästhetischen" Leerzeichen vor oder nach oder zwischen den ">" lassen!
> Es sei denn, die Leerzeichen sollen auch wirklich mit in die Zieldatei.
Gruß
Biber
Moin AlexBart,
im unteren Drittel lässt die Konzentration nach...
if not exist %cname1% do call :find2
if not exist %cname1% goto find2
:: er soll doch entweder/oder ausführen --oder doch ggf. beides?? Wäre doch Unsinn.
:eof Sprungmarke ":eof" ist eine INTERNE. Niemals definieren!!
:find1
echo final Configfile:>>%ausgabe%
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname1%>>%ausgabe%
:eof Gemeint ist hier: Sprung zum Ende des Batches, also:
goto :eof
:find2
echo temporary Config:>>%ausgabe%
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname2%>>%ausgabe%
:eof Wenn find2 ein geCALLter Block wäre, dann
:: wäre "goto :eof" hier die Anweisung: Gehe zurück in die Zeile nach dem CALL-Statement
Mehrfach eine gleichnamige Sprungmarke definieren (":eof") würde mich vielleicht nicht überfordern, aber einen CMD-Interpreter aus dem Hause M$ allemal.
Gruß
Biber
im unteren Drittel lässt die Konzentration nach...
if not exist %cname1% goto find2
:: er soll doch entweder/oder ausführen --oder doch ggf. beides?? Wäre doch Unsinn.
:find1
echo final Configfile:>>%ausgabe%
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname1%>>%ausgabe%
goto :eof
:find2
echo temporary Config:>>%ausgabe%
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname2%>>%ausgabe%
:: wäre "goto :eof" hier die Anweisung: Gehe zurück in die Zeile nach dem CALL-Statement
Mehrfach eine gleichnamige Sprungmarke definieren (":eof") würde mich vielleicht nicht überfordern, aber einen CMD-Interpreter aus dem Hause M$ allemal.
Gruß
Biber