J L 10 Geschrieben 25. Mai 2008 Melden Teilen Geschrieben 25. Mai 2008 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 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 25. Mai 2008 Melden Teilen Geschrieben 25. Mai 2008 Hallo, ich macht sowasl mit der For-Schleife, damit kann man die Textdatei zeilenweise bearbeiten. Siehe for /? oder die Hilfe und Support! Zum Textlesen ist for /f geeignet. Falls Du mehr Rat brauchst, bitte melden! Gruß Edgar Zitieren Link zu diesem Kommentar
J L 10 Geschrieben 25. Mai 2008 Autor Melden Teilen Geschrieben 25. Mai 2008 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? Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 25. Mai 2008 Melden Teilen Geschrieben 25. Mai 2008 So zum Beispiel: for /f "tokens=1,2" %%i in ('net config server ^| findstr "Serverbeschreibung"') do @set srvcomment=%%j Zitieren Link zu diesem Kommentar
J L 10 Geschrieben 25. Mai 2008 Autor Melden Teilen Geschrieben 25. Mai 2008 die eigentliche Such findet aber doch mit diesem Befehl statt findstr "Serverbeschreibung" oder? Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 25. Mai 2008 Melden Teilen Geschrieben 25. Mai 2008 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 Zitieren Link zu diesem Kommentar
J L 10 Geschrieben 25. Mai 2008 Autor Melden Teilen Geschrieben 25. Mai 2008 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 Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 25. Mai 2008 Melden Teilen Geschrieben 25. Mai 2008 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 Zitieren Link zu diesem Kommentar
J L 10 Geschrieben 26. Mai 2008 Autor Melden Teilen Geschrieben 26. Mai 2008 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. Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 26. Mai 2008 Melden Teilen Geschrieben 26. Mai 2008 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 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 26. Mai 2008 Melden Teilen Geschrieben 26. Mai 2008 Hast Du mal den vollständigen Pfad zur Datei angegeben? Zitieren Link zu diesem Kommentar
J L 10 Geschrieben 26. Mai 2008 Autor Melden Teilen Geschrieben 26. Mai 2008 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 Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 26. Mai 2008 Melden Teilen Geschrieben 26. Mai 2008 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 Zitieren Link zu diesem Kommentar
J L 10 Geschrieben 26. Mai 2008 Autor Melden Teilen Geschrieben 26. Mai 2008 Danke Biber es geht!!! Warum habe ich Trott*l nicht an findstr gedacht! Der Grund ist ich will aus einem Router Einstellungen auslesen welcher er nicht im Telnet zur verfügung stellt. Leider. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.