Jump to content

In TXT per Batch suchen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

Ziel ist es wenn ein gewissen String in einer TXT vorhanden ist gewissen Varialben einen wert zu geben.

 

Bei Windows Vista geht das auch wie folgt bei mir.

 

type %tmp%\test.txt | find /i "checked name=IPFSRStatus0"
if not errorlevel 1 (
set ip0=1
set ber0=0
)

 

Leider geht das aber irgendwie nicht in Windows XP ob die entsprechende TXT den String beinhaltet.

 

J L

Link zu diesem Kommentar

Wie stellst du dir das mit einer For Schleife vor. Bis jetzt habe ich diese immer nur dafür Benutzt Daten in eine Variable zu schreiben. Aber nicht diese zu finden. Es sollen keinen Daten aus der TXT übernommen werden sondern einfach nur wenn dies vorhanden sind soll die Variablen gleich diesem Wert gesetzt werden.

Wie geht das mit einer FOR Schleife?

Link zu diesem Kommentar

Etwas vereinfachte Beschreibung: Der Befehl net config server erzeugt im RAM einen Datensatz, mit der for /f-Schleife wird dieser Zeilenweise bearbeitet, mir tokens 1,2 die beiden Blöcke gelesen, der Block 1 steht jeweils in %%i, der Block 2 in %%j. %5j wird über die Pipe an den Find-Befehl weitergeben, beim Finden von Serrverbeschreibung wird dann set ausgeführt, %%j gelangt in die srvcomment.

 

Hier mal etwas anders für eine Textdatei.

 

for /f %%i in (c:\Test.txt) do echo %%i zeigt jeweils den ersten Block aller Zeilen

 

for /f "tokens=*" %%i in (c:\Test.txt) do echo %%i zeigt alle Tokens der Zeilen.

 

for /f "tokens=*" %%i in (c:\Test.txt ^| find "Suchstring" ) do echo %%i übergibt alle Blöcke in die Pipe.

Ich habe das mal probiert mit XP:

 

type c:\test.txt | find /i "checked name=IPFSRStatus0"
if not errorlevel 1 (
set ip0=1
set ber0=0
)

echo %errorlevel%
echo %ip0%
echo %ber0%
pause

 

Prinzipiell funktioniert es.

Ich erhalte auch so einen korrekten errolevel.

type c:\Test.txt | find "checked"
echo %errorlevel%
pause

Link zu diesem Kommentar

Es scheint also an der Datei zuliegen in der gesucht wird. Ich habe sie mal angehängt. Es handelt sich dabei um eine HTML datei wobei ich überprüfen will ob die Kästchen angemarkert sind. Deshalb suche ich nach "checked und dem entsprechden name=..

In Windows Vista/Server 2008 geht das einwandfrei nur in WinXP findet er sie nicht.

 

Danke für deine Hilfe und Mühe

test.txt

Link zu diesem Kommentar

Moin J L,

> In Windows Vista/Server 2008 geht das einwandfrei nur in WinXP findet er sie nicht.

hast Du sicherheitshalber mal geprüft, ob an dem XP-Rechner auch beide Umgebungsvariablen %temp% und %tmp% /die zweite benutzt Du) gesetzt sind.

 

%temp% ist immer gesetzt, %tmp% (auf das gleiche Verzeichnis) eigentlich auch - aus Kompatibilitätsgründen.

Nur benutzen tut es selten jemand absichtlich...

Bringt ein "type %tmp%\test.txt denn das erwartete Ergebnis?

 

Grüße

Biber

Link zu diesem Kommentar
An den Variablen liegt es nicht sondern irgendwie an der Find funktion denn wenn ich auch nur die Datei auf den Desktop lege und
find /i "string" dateiname 

eingebe gibt er mir keine ergebnis zurück obwohl der String "checked" in der Datei eindeutig vorhanden ist.

 

Du kannst ja auch nicht "checked" finden, wenn Du nach "string" suchst....

Kleiner Scherz.

 

kann es daran liegen, dass Du mit "find" vielleicht nicht die %windir%\system32\Find.exe aufrufst, sondern irgendeine längst vergessene Find.bat in Deinem Suchpfad %path%?

 

P.S. Das Testen von Batchdateien durch Doppelklick auf dem Desktop ist ja echt eine geniale Variante :ThumpsUp:. Bist Du da ganz allein drauf gekommen und welche Vorteile hat es beim Testen?

 

Grüße

Biber

Link zu diesem Kommentar

Ich habe find jetzt mal Pfadangabe ausgeführt und den Dateipfad angeben.

Er gibt auch nicht aus Datei exisitiert nicht sondern einfach nur:

 

----------------------test.txt[\code]

 

find findet einfach nichts.

 

Die find.exe in WinXP werde ich wohl nicht ändern können, aber vielleicht lässt sich das ganze mit einem vbs skript lösen es müsste nur einfach eine datei ablegen wenn "checked" vorhanden ist.

Leider habe ich von VBS aber so gar keine Ahnung wie man dort etwas in einer txt sucht und dann einfach eine datei erzeugt.

 

Danke für die ganzen Antworten und Tipps

 

Grüße

J L

Link zu diesem Kommentar

Moin J L,

 

nu mal nicht gleich resignieren ... son büschen fertig übersetzten Werkzeugskrams hat XP auch dabei. Musst ja nicht gleich selber scripten.

 

Also ich hab mir Deine so genannte "*.txt"-Datei mal runtergeladen... na ja, unter "Textdatei" habe ich mir etwas anderes vorgestellt. Mit weniger XML-Tags und hätte auch nicht erwartet, den Quellcode einer Browserseite vorzufinden.

 

Anyhow, als TEXT-Datei interpretiert ist dat Dingen ich glaube ~5064 Zeichen lang..

In einer einzigen Zeile -kein Zeilenumbruch (soll ja browserlesbar und nicht menschenlesbar sein ...und Browser orientieren sich an tags, nicht an CRLFs. )

 

Die XP-Find.exe verweigert allerdings in der Tat bei so langen Zeilen den Dienst - hab nicht getestet, wo genau nun die maximale Zeilenlänge für (XP-) Find.exe ist.

Wahrscheinlich bei Größenordnung 2068 (undokumentierte max Zeilenlänge für den CMD-Prompt)

 

Der is schlicht die Zeile zu lang... das is das ganze Geheimnis.

 

Workaround, nein, Quatsch, Lösung:

Nimm die FindStr.exe (is sich dabei bei XP)

 


findstr /i /C:"checkbox name=IPFSRStatus0" test.txt >nul && @echo Gefunden!
-oder-
findstr /i /C:"checkbox name=IPFSRStatus0" test.txt >nul || @echo Nix zu tun...
[/Code]

 

Zusätzlich zum Dir ja bekannten Parameter /i habe ich noch /C: für den exakten Vergleich (also alle Zeichen in genau dieser Reihenfolge) angegeben. Siehe FindStr /?.

 

Vista kennt sich auch FindStr. Ebenso Win2000. Würde ich also grundsätzlich verwenden.

 

Grüße

Biber

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...