okidoki
Goto Top

Batch: String in Variable

Guten Morgen,

trotz intensiver Suche komme ich leider nicht weiter ...
Dabei haben mir bisher vor allem die Seiten geholfen:

Powershell-Befehl in Variable umleiten
und
POWERSHELL – SELECT-STRING – SUCHEN UND VERARBEITEN VON DATEIINHALTEN

Wie ich finde total hilfreich!

Nun benötige ich aber als Ausgabe eine Variable zur Weiterverarbeitung in einer Batch ... da waren sie, meine Probleme face-smile

Aufgabenstellung:
In einer Log-Datei nach einem Schlüsselwort suchen (z.B. Ping) und die Ausgabe (ganze Zeile) in einer Variablen zur weiteren Verarbeitung speichern.
Variation:
Da mehrere Zeilen gefunden werden könnten würde ich gerne mehrere Variablen erzeugen. Insbesondere kann das schwierig werden, da momentan alle vorhandenen Dateien aufgelistet werden (ich könnte natürlich eine einzige definieren, Multifiles wären aber besser, um alle Strings zu finden).

Nun fehlen mir die weiteren Schritte:

An der Console klappt es wunderbar (Eingabe -> Ausgabe):
PS C:\> select-string -path *.txt -pattern "ping"  
test.txt:18:D:\test>ping /n 3 localhost  1>nul

... aber in Batch nicht, geschweige denn, dass ich eine Variable erhalte:

:: Batch
powershell.exe select-string -path *.* -pattern “ping”
D:\batch>powershell.exe select-string -path *.txt -pattern ÔÇ£pingÔÇØ

Gruß okidoki

Content-ID: 636676

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

erikro
erikro 31.12.2020 um 10:23:20 Uhr
Goto Top
Moin,

Zitat von @OKIDOKI:
... aber in Batch nicht, geschweige denn, dass ich eine Variable erhalte:

> :: Batch
> powershell.exe select-string -path *.* -pattern “ping”
> D:\batch>powershell.exe select-string -path *.txt -pattern ÔÇ£pingÔÇØ
> 

Tja, nimm mal einen Editor, der die Anführungszeichen nicht in grafische umwandelt. face-wink

hth

Erik
OKIDOKI
OKIDOKI 31.12.2020 aktualisiert um 10:32:01 Uhr
Goto Top
Hervorragend, 'Hash' sei Dank face-smile

:: Batch
powershell.exe select-string -path *.* -pattern 'ping'  

Die Umleitung in Variablen ist mir aber weiterhin unklar ...
wobei das für alle weiteren PS-Ausgaben ebenfalls interessant ist.
erikro
erikro 31.12.2020 um 11:13:04 Uhr
Goto Top
Warum schlägst Du Dich noch mit dem alten Batchzeug rum? Warum nicht gleich alles in PS?
OKIDOKI
OKIDOKI 31.12.2020 um 11:19:42 Uhr
Goto Top
... da leider der Rest in einem größeren Batch-Projekt verarbeitet ist!

btw: Vielleicht wäre möglich, nur eine Variable zu definieren. Schließlich soll es "nur" darum gehen in einer Log herauszufinden, ob generell ein error aufgetreten ist. Eine nähere Betrachtung wäre sicher dann mit mit PS ausführlich darzustellen, aber für einen "Notfallknopf" würde mir die einfache Variante reichen.
OKIDOKI
OKIDOKI 31.12.2020 um 16:52:08 Uhr
Goto Top
Eine kleine Lösung habe ich gefunden, allerdings wird nicht die gesamte Zeile gespeichert. Jemand noch eine Idee?

for /f %%a in ('powershell -Command "select-string -path *.* -pattern 'ping'"') do set variable=%%a  
echo %variable%
OKIDOKI
OKIDOKI 02.01.2021 aktualisiert um 10:39:44 Uhr
Goto Top
Nach dem "Herausfinden" der problematischen Zeile kann folgend die komplette Zeile aus der Txt-Datei ausgelesen werden. Vielleicht hilft dies auch anderen, im Netz habe ich zumindest sehr viele Hilferufe gefunden - die, bis auf eine, aber leider keine praktikable Lösung gefunden haben. Daher hier die (bisher) beste Version:
Beispiel: Zeile 17 (16 Zeilen werden übersprungen):
@echo off
set /a x1=16
for /f "tokens=* delims=~ skip=%x1%" %%i in (test.txt) do call :ablauf %%i  
:ablauf
set x=%*
echo %x%

Quelle: Textdatei auslesen...???