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-Key: 636676

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

Printed on: April 26, 2024 at 03:04 o'clock

Member: erikro
erikro Dec 31, 2020 at 09:23:20 (UTC)
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
Member: OKIDOKI
OKIDOKI Dec 31, 2020 updated at 09:32:01 (UTC)
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.
Member: erikro
erikro Dec 31, 2020 at 10:13:04 (UTC)
Goto Top
Warum schlägst Du Dich noch mit dem alten Batchzeug rum? Warum nicht gleich alles in PS?
Member: OKIDOKI
OKIDOKI Dec 31, 2020 at 10:19:42 (UTC)
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.
Member: OKIDOKI
OKIDOKI Dec 31, 2020 at 15:52:08 (UTC)
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%
Member: OKIDOKI
OKIDOKI Jan 02, 2021 updated at 09:39:44 (UTC)
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...???