bioperiodik
Goto Top

Batch - Probleme beim findstr, muss man das maskieren?

Guten Morgen an alle,

Ich bin gerade dabei die Proxyeinstellungen unserer Clients auszulesen, für den IE ist das ja auch kein problem, allerdings bereitet mir das ganze bei Mozilla Firefox einige Probleme.

Die Proxyeinstellungen von Firefox sind in der Datei %USERPROFILE%\Anwendungsdaten\Mozilla\Firefox\Profiles\* unter prefs.js gespeichert.

Ich bin jetzt soweit das ich die prefs.js in eine Variable speicher und diese dann auswerten will.

Dafür benutze ich folgende Zeilen:
set ausgabe="C:\Freigabe\prefs.txt"  

@for /F "tokens=2 delims= " %%i in ('type %ausgabe% ^| findstr /i "proxy.http"') do set "var=%%i"  

echo %var%

als Ausgabe erhalte ich jetzt allerdings einmal die IP und einmal den Port, ich hätte allerdings gerne nur die IP.

Darum würde ich gernen nach "network.proxy.http" suchen.
Das funktionier aber nicht, weil er scheinbar Probleme mit den "" hat. Muss ich diese ausmaskieren? Wenn ja wie?

Oder kennt von euch jemand einen einfacheren Weg das ganze zu bewerkstellingen?

Danke im Vorraus
MfG Sebastian

Content-Key: 147888

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

Ausgedruckt am: 29.03.2024 um 16:03 Uhr

Mitglied: paulepank
paulepank 29.07.2010 um 09:42:53 Uhr
Goto Top
Hallo Sebastian,

Das funktionier aber nicht, weil
Für diese Fehlerbeschreibung kannst du dich schon mal grinsend zurücklehnen.
Damit hast du deinen Teil zur Lösung deines Problems getan.

Falls hier jemand fragt, welche Ausgabe die Batch dir mitteilt, betrachte die Frage als reine Provokation.

Ob "proxy.http" oder "network.proxy.http" ist ###egal. Das Suchergebnis ist immer gleich.
Also suche z.B. nach "http_port" und schon hast das gewünschte.

TIP1: der Feldtrenner Leerzeichen ist Standard und muß nicht extra angegeben werden.
TIP2: sollten dich die Klammer und das Semikolon in %var% auch noch stören, ein
echo %var:~0,-2%
ist hier hilfreich.

cu paulepank
Mitglied: bioperiodik
bioperiodik 29.07.2010 um 11:46:02 Uhr
Goto Top
Hallo paulepank,

Danke für die Antwort!

Es gibt keine Ausgabe, die Batch wird einfach geschlossen.

Ich denke ich hab mein Problem schon deutlich geschildert, ist wohl falsch rübergekommen:

Momentan such ich nur nach proxy.http, ich will aber nach "network.proxy.http" suchen.

im code würde das dann so aussehen:

bisher:
@for /F "tokens=2 delims= " %%i in ('type %ausgabe% ^| findstr /i "proxy.http"') do set "var=%%i"   

ich will aber das hier suchen:
@for /F "tokens=2 delims= " %%i in ('type %ausgabe% ^| findstr /i ""network.proxy.http""') do set "var=%%i"   

aber offenbar hat er ein Problem mit den "" im findstr, darum die Frage ob ich da etwas maskieren muss bzw. ob das überhaupt funktioniert.
Mitglied: Biber
Biber 29.07.2010 um 12:15:08 Uhr
Goto Top
Moin bioperodik,

vielleicht beantwortet das deine Frage bzw. deine richtige Vermutung:
[Anmerkung: Demo am CMD-Prompt. das ">" am Anfang einer Zeile NICHT mit eingeben, das ist die 2.Zeile meines Prompts.]
(=12:12:18  D:\temp=)
>echo "Test1">d:\temp\test4findstr.txt  

(=12:12:36  D:\temp=)
>echo Test1 ohne Anführungszeichen>>d:\temp\test4findstr.txt

(=12:12:47  D:\temp=)
>findstr /i "Test1" test4findstr.txt  
"Test1"  
Test1 ohne Anführungszeichen

## beide Zeilen werden ausgegeben - nicht erwünschtes Resultat


(=12:12:52  D:\temp=)
>findstr /i ""Test1"" test4findstr.txt  
"Test1"  
Test1 ohne Anführungszeichen

## beide Zeilen werden ausgegeben - nicht erwünschtes Resultat


(=12:13:00  D:\temp=)
>findstr /i "\"Test1\"" test4findstr.txt  
"Test1"  

## nur Zeile "Test" (in Anführungszeichen) wird ausgegeben 
Die letzte FindStr-Variante wäre für dich die richtige.

Grüße
Biber
Mitglied: paulepank
paulepank 29.07.2010 um 13:14:23 Uhr
Goto Top
Hallo,
Es gibt keine Ausgabe, die Batch wird einfach geschlossen.
Dann solltest du die Batch in der cmd starten um etwas zu sehen und / oder den Befehl pause einfügen und das @ entfernen.

Selbst wenn ich die Zeile so eingebe, wie du es geschrieben hast findet die korrekte Ausgabe statt.
Ich geh jetzt mal davon aus, daß die prefs.txt inhaltlich gleich der prefs.js ist.
Der Begriff wird immer gefunden. Das Problem liegt m.E. woanders

@Biber
hier muß nichts maskiert werden.

cu paulepank
Mitglied: paulepank
paulepank 29.07.2010 um 13:22:14 Uhr
Goto Top
Beispiel:
Inhalt von prefs.txt
...
user_pref("network.proxy.http", "ich.bin.der.proxy");
user_pref("network.proxy.http_port", 4711);
...

set ausgabe="d:\prefs.txt"  
for /F "tokens=2 delims= " %%i in ('type %ausgabe% ^| findstr /i ""network.proxy.http""') do set "var=%%i"  
echo %var:~0,-2%
pause

Ausgabe:
C:\>set "var="ich.bin.der.proxy");"
C:\>set "var=4711);"
C:\>echo 4711
4711
C:\>pause
Drücken Sie eine beliebige Taste . . .


cu paulepank
Mitglied: bioperiodik
bioperiodik 29.07.2010 um 13:25:23 Uhr
Goto Top
Danke Biber und paulepank für eure Hilfe!

Der Tipp von Biber hat geholfe, wenn ich die " mit \" maskier läuft es problemlos :D

Danke an paulepank für den Tipp mit echo %var:~0,-2%

Die Batch macht jetzt genau was ich will!

Hier nochmal der Vollständige Code um die Proxy IP aus Firefox auszulesen:

for /d %%i in ("%USERPROFILE%\Anwendungsdaten\Mozilla\Firefox\Profiles\*") do set "pfad=%%i"  
echo %pfad%
set ausgabe="%pfad%\prefs.js"  
@for /F "tokens=2 delims= " %%i in ('type %ausgabe% ^| findstr /i "\"network.proxy.http\""') do set "var=%%i"  
echo %var:~1,-3%
Mitglied: Biber
Biber 29.07.2010 um 13:27:47 Uhr
Goto Top
Moin paulepank,

doch.
>findstr /i ""network.proxy.http"" prefs.txt  
"network.proxy.http_port", 4711  
"network.proxy.http", "ich.bin.der.proxy"  

(=13:25:37  D:\temp=)
>findstr /i "\"network.proxy.http"\" prefs.txt  
"network.proxy.http", "ich.bin.der.proxy"  

(=13:25:47  D:\temp=)

Bei deiner Demo bleibt nach der FOR-Anweisung nur die LETZTE Zeile erhalten.
Dreh doch die Zeilen-Reihenfolge mal um in deiner prefs.txt...

Grüße
Biber
Mitglied: paulepank
paulepank 29.07.2010 um 13:38:24 Uhr
Goto Top
Hallo Biber,

jaein,
bei meinen Testdaten ist die Reihenfolge anders.
unabhängig davon werden beide Zeilen gefunden (auch ohne Maskierung), es wird nur die falsche ausgewertet.

Deshalb habe ich ja Eingangs geschrieben er soll gleich nach http_port suchen.
Dann ist es eindeutig auch ohne Maskierung und die Reihenfolge der Zeilen ist auch wurscht.

cu paulpank
Mitglied: paulepank
paulepank 29.07.2010 um 13:46:03 Uhr
Goto Top
Hallo,

auch wenn schon gelöst:

Zitat oben:
ich hätte allerdings gerne nur den Port.
Zitat drüber:
Hier nochmal der Vollständige Code um die Proxy IP aus Firefox auszulesen

ja, was wolltest du jetzt ?
Mitglied: bioperiodik
bioperiodik 29.07.2010 um 14:11:52 Uhr
Goto Top
Servus,

Oh, dass ist mir garnicht aufgefallen! War wohl ein Flüchtigkeitsfehler!

Ich will die IP, sonst hätte der Code ja funktioniert face-wink Sorry!!!

Jetzt läuft das Ganze auf jedenfall einwandfrei und es werden die Proxy-IPs unsrer Clienten ausgelesen!

Danke nochmal für die Hilfe!
Und sorry für die Verwirrung *schäm*