Batch: String ausschneiden aus txt-Datei?
Hallo,
ich bin mir etwas am basteln und komme an einem Punkt nicht weiter:
Ich benötige einen Dateinamen aus einem laufenden Prozess. Mit dem Befehl
tasklist.exe /FO CSV /V > d:\running.txt
werden alle laufenden Prozesse in der running.txt gespeichert. Diese wiederum lasse ich mit
findstr mame running.txt > game.txt
filtern und mir die Zeile, in der das Wort mame vorkommt, in eine neue Datei ablegen.
In dieser steht jetzt folgende Zeile:
"mame64.exe","1620","Console","11","406.844 K","Running","DESKTOP-J89gghjk89\Josef","0:00:53","MAME: 64th. Street - A Detective Story (World) [64street]"
Aus dieser Interessiert mich nur das Ende was in den [....] Klammern steht. Ich benötige einen Befehl der mir alles um die Klammern löscht und mir bestenfalls nur das Ergebnis innerhalb der Klammern liefert.
Kann mir da Jemand helfen?
2 Antworten
ganz einfach:
running.txt
"chrome.exe","12308","Console","1","55.472 K","Unknown","DESKTOP-J89gghjk89\Josef","0:00:00","Nicht zutreffend"
"chrome.exe","12376","Console","1","39.300 K","Unknown","DESKTOP-J89gghjk89\Josef","0:00:03","Nicht zutreffend"
"mame64.exe","1620","Console","11","406.844 K","Running","DESKTOP-J89gghjk89\Josef","0:00:53","MAME: 64th. Street - A Detective Story (World) [64street]"
"Calculator.exe","1380","Console","1","3.552 K","Running","DESKTOP-J89gghjk89\Josef","0:00:00","Rechner"
.... und so weiter
demo.cmd
@echo off
rem trenne die gefundene Zeile an [ und].
rem Token 1 ist alles vor [ ,Token 2 ist alles nach [ , der Rest nach ] interessiert uns auch nicht...
rem wir wollen nur Token 2...
for /f "tokens=2 delims=[]" %%a in ('findstr "mame" "running.txt"') do (
set "myVariable=%%a"
)
rem mal anzeigen
echo zwischen den eckigen Klammern stand: %myVariable%
pause
allerdings fährst Du noch immer mit der Kirche ums Dorf, Du benötigst nicht einmal die Datei "running.txt"
man kann auch die Ausgabe von tasklist direkt filtern :
@echo off
echo etwas geduld...
rem liste alle Laufenden Prozesse, welche mit "mame" beginnen
for /f "tokens=2 delims=[]" %%a in ('tasklist.exe /fi "ImageName eq mame*" /v') do (
rem Funde nur mal zur Demo anzeigen falls mehr als einer.
echo gefunden:%%a
rem nur der letzte wird gespeichert!
set "myVariable=%%a"
)
if "%myVariable%"=="" (echo Nix gefunden mit eckigen Klammern gefunden
) else (echo zwischen den eckigen Klammern stand: %myVariable%)
pause
viele Wege führen nach Rom:
rem liste alle Laufenden Prozesse, welche CaseSensitiv-exakt "MAME:" im Fentertitel habem
for /f "tokens=2 delims=[]" %%a in ('tasklist.exe /v^|find "MAME:"') do (
rem wie in den anderen Beispielen
echo gefunden:%%a
)
es gibt 1000 Möglichkeiten etwas zu filtern
Glossar:
Vielen lieben Dank!!! Ich bin einen Arcade-Automaten am bauen und will gerne ein LED-Panel als Anzeige, welches Spiel gerade läuft. Mit dem Ergebnis kann ich via SSH einen Befehl an den Raspi schicken, welche Grafik er anzeigen soll! Danke!!!
Versuch mal folgendes
@echo off
setlocal
set "var=mame64.exe","1620","Console","11","406.844 K","Running","DESKTOP-JU3A0J3\Josef","0:00:53","MAME: 64th. Street - A Detective Story (World) [64street]"
set "After=%var:*[=%"
echo %after:~0,-1%
pause
Warum? Wenn du dir die Zeile einliest und als Variable deklarierst müsste das funktionieren.
set /p var=<textdatei.txt
Funktioniert leider nicht, die Umgebungsvariable wäre nicht definiert...