connecthor
Goto Top

Eigenheiten von FINDSTR

ich habe ein problemchen mit dem FINDSTR. gibt es ne möglichkeit eine längere zeichenfolge zu vergleichen, die sonderzeichen enthält??

mein script soweit:

set "von=pref("mailnews.database.global.indexer.enabled", true);"
set "wo=c:\test\all-thunderbird.js"
findstr /C:"von" "%wo%"&& goto exit

kann es sein, dass ich was falsch mache mit der behandlung der anführungszeichen???

Bastla gab mir folgendes beispiel:


Versuch es mit folgender Schreibweise:
set "von=pref(\"mailnews\.database\.global\.indexer\.enabled\", true);"


kommt FINDSTR nicht mit sonderzeichen klar?? ich habe jetzt die sonderzeichen (" mit . ersetzt. das läuft soweit. sieht aber komisch aus.

bitte um weitere vorschläge.

Danke

Content-ID: 142533

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

bastla
bastla 10.05.2010 um 16:12:00 Uhr
Goto Top
Auch Dir kein "Hallo" ...

Hast Du es schon mit einer richtigen Variablenschreibweise versucht?
findstr /C:"%von%" "%wo%"&& goto exit 
bastla
connecthor
connecthor 11.05.2010 um 10:26:29 Uhr
Goto Top
sorry..

dann "doppeltes" HALLO face-big-smile

ja, ist mir ein fehler beim kopieren unterlaufen, da ich ca 1 milliarde testscripts habe face-smile


natürlich habe ich das "von" mit "%von%" probiert...
Biber
Biber 12.05.2010 um 16:29:06 Uhr
Goto Top
Moin connecthor,

ist ein bisschen schwierig, deinen Fehler einzugrenzen ohne weitere Details..

Ein proof-of-concept von bastlas Vorschlägen am CMD-Prompt führt jedenfalls - wie zu erwarten war - zum Erfolg.
>set "wo=d:\temp\testprefs.txt"  

>set "von=pref(\"mailnews.database.global.indexer.enabled\", true);"  

>findstr /n /C:"%von%" "%wo%"  
5:set "von=pref("mailnews.database.global.indexer.enabled", true);"  
[ in der Datei "d:\temp\testprefs.txt" steht eine Copy & Paste-Kopie deines Beitrags; dein Suchstring wird in Zeile 5 gefunden]

Also bitte poste noch einmal
  • deinen Komplett-Batch in Code-Tags
  • und die Original-zu-findende-Suchzeile aus der c:\test\all-thunderbird.js [+je zwei Zeilen davor/danach] ebenfalls in Code-Tags
...denn dann muss dort ein Tippfehler drin sein.

es sei denn, du hast Recht und deine FindStr.exe ist kaputt....

Grüße
Biber
connecthor
connecthor 21.05.2010 um 19:02:21 Uhr
Goto Top
Hallo,
meine datei sieht jetzt SO aus

@Echo off & SETLOCAL enabledelayedexpansion
title TB3 Indexer aus
cls
set /a Nr=99
set "pfad=c:\progies\pstools"  
set "von=pref(.mailnews.database.global.indexer.enabled...true)."  
set "Von1=pref("mailnews.database.global.indexer.enabled", true);"  

set "nach=pref("mailnews.database.global.indexer.enabled", false);"  

:loop

set /a Nr+=1
if %nr%==1665 goto exit
set "wer=\\%Nr%\C$\Programme\Mozilla Thunderbird\defaults\pref\all-thunderbird.js"  
ping -n 1 %Nr% >NUL
if %errorlevel%==1 echo Computer %Nr% ist aus!!
if %errorlevel%==1 goto loop

if NOT EXIST "%wer%" goto loop  

findstr "%von%" "%wer%">NUL&& goto :do  

echo Rechner %Nr% hat kein TB3 oder die richtigen Einstellungen

goto loop

:do
if NOT EXIST c:\temp md c:\temp
set "t=c:\temp\text.tmp"  
if exist "%t%" del "%t%"  

echo Bearbeite Rechner %Nr%!!
for /f "usebackq delims=" %%i in ("%wer%") do set "Line=%%i" & set Line=!Line:%von1%=%nach%! & echo !Line!>>"%t%"  
move /y "%t%" "%wer%"  
echo TB3 auf Rechner %Nr% geändert >> C:\PROGIES\txt\TB3.txt
goto loop

:exit
exit

mir missfällt lediglich, dass die " im findstr mit der variable von zeile 6 (ich find noch raus wie man das hier darstellt) durch punkte ersetzt werden müssen, da der string sonst nicht gefunden wird.
welche sonderzeichen muss ich denn durch wildcards ersetzen? oder hebeln backslashes die sematik aus???

danke für eure zeit


[Edit Biber] Codetags ergänzt. [/Edit]
bastla
bastla 21.05.2010 um 19:39:02 Uhr
Goto Top
Hallo connecthor!

Du kannst Dich also nicht zu
set "von=pref(\"mailnews\.database\.global\.indexer\.enabled\", true);"
entschließen?
welche sonderzeichen muss ich denn durch wildcards ersetzen?
Eigentlich keine - es gibt nur einige Zeichen (findest Du am Ende der Onlinehilfe "findstr /?"), die innerhalb von Suchstrings besondere Bedeutung haben und deshalb mit "\" maskiert werden müssen.

Außerdem zu beachten: Wenn im Suchstring Leerzeichen enthalten sind, benötigst Du "/c:", da ansonsten die durch die Leerzeichen getrennten Bestandteile jeweils als eigener (mit "oder" verknüpfter) Suchbegriff gelten ...

Grüße
bastla
connecthor
connecthor 25.05.2010 um 09:14:11 Uhr
Goto Top
GuMo Bastla,

vielen dank für deinen tipp.

dann muss ich ja die "."(punkte) nicht maskieren, da diese ja als wildcard dienen.

super, dann weiß ich wieder ein wenig mehr.

bis zum nächsten mal

THNX