blacksun
Goto Top

per Batch in eine Datei nach einem bestimmten Begriff inkl der Sonderzeichen ist kleiner als und ist größer als suchen - wie geht das?

Hallo,

ich habe eine Datei file.txt. Diese wird wie folgt erzeugt:
mittels wget wird die ip-Adresse von checkip.dyndn.org geholt und als file.txt abgespeichert.
Mittels for /f gehe ich her und sorge dafür, dass nur die ip-Adresse selbst in der file.txt steht.

Nun möchte ich überprüfen, ob in der file.txt nur die ip-Adresse drin steht.

Der DL über wget soll nämlich über verschiedene Proxies erfolgen. Wenn einer nicht richtig funktioniert, dann steht am Ende eben nicht die ip-Adresse in file.txt, sondern der rest einer HTML-Datei.

Diese lässt sich aber identifizieren, indem man die Datei auf das Vorhandensein des html-Tags prüft.

Daher die Frage an euch, wie ich überprüfen kann, ob ein html> in der Datei vorkommt? Denn entweder am Anfang oder am Ende der Datei kommt der html> als Teil des Start- oder des End-Tags vor.

Ich habe es schon wie folgt versucht:

type file.txt|find "html"  
if  %errorlevel% == 1 goto htmlGefunden
if  %errorlevel% == 0 goto ipAdresseGefunden
goto uschi

:htmlGefunden
echo %errorlevel%
echo html gefunden
pause


:ipAdresseGefunden
echo %errorlevel%
echo ip gefunden
pause

Zwar zeigt find etwas an, wenn html in der Datei vorkommt. Allerdings ändert es den Errorlevel nicht, so dass ich dann mittels if überprüfen kann, ob nun ein html in der Datei vorkommt oder ob nicht.

Viele Grüße
Martin

Content-ID: 95742

Url: https://administrator.de/forum/per-batch-in-eine-datei-nach-einem-bestimmten-begriff-inkl-der-sonderzeichen-ist-kleiner-als-und-ist-groesser-95742.html

Ausgedruckt am: 22.12.2024 um 22:12 Uhr

bastla
bastla 01.09.2008 um 06:58:54 Uhr
Goto Top
Hallo blacksun!

Versuch es so:
@echo off & setlocal
findstr /i "html" "d:\file.txt">nul || goto :KeinhtmlGefunden  

echo html gefunden
pause
goto :eof

:KeinhtmlGefunden
echo Kein html gefunden
pause
Grüße
bastla

P.S.: Für die Formatierung als Code benötigst Du <> anstelle von
blacksun
blacksun 01.09.2008 um 16:32:58 Uhr
Goto Top
Hallo bastla,

Vielen Dank, damit funktionierts. Jetzt muss ich nicht erst umständlich die Sonderzeichen weglöschen, damit das ganze nicht in Wald fährt.

Viele Grüße
Martin
RaNgErID
RaNgErID 19.12.2009 um 17:26:41 Uhr
Goto Top
Hallo bastla,

ist anscheint eine dumme frage aber ich bräuchte das ganze umgekehrt sprich springe wenn html gefunden ?

mfG RaNgErID
bastla
bastla 19.12.2009 um 17:32:38 Uhr
Goto Top
Hallo RaNgErID!


Grüße
bastla
RaNgErID
RaNgErID 19.12.2009 um 20:12:11 Uhr
Goto Top
Besten Dank bastla


Funktioniert einwandfrei was solch Zeichen alles bewirken können. ^^

mfg RaNgErID
RaNgErID
RaNgErID 04.01.2010 um 12:41:44 Uhr
Goto Top
hallo

ich hätte da noch eine Frage.

und zwar möchte ich gern, die Auflistung nicht untereinander, sondern nebeneinander, zudem hätte ich gern.

- bisher meine Lösung:
for /f "tokens=1,* delims=:" %%i in ('dir /b archiv\*.txt^|findstr /n $') do @echo [%%i] %%j

- Ausgabe:
[%%i] %%j

[1] datei1-text-text.txt
[2] datei2-text.-texttxt
[3] datei3-text-text.txt
[4] datei4-text-text.txt
[5] datei5-text-text.txt

das er mir,

[1] datei1 [2] datei2 [3] datei3 [4] datei4 [5] datei5

ausgibt, sprich das "-text-text.txt" weg ist.

ist das möglich, und wenn ja wie ?


mfG RaNgErID
bastla
bastla 04.01.2010 um 13:01:39 Uhr
Goto Top
Hallo RaMgErID!

Unter der Annahme, dass jeweils am ersten "-" getrennt werden soll und es keine Dateinamen mit enthaltenen "!" gibt:
@echo off & setlocal enabledelayedexpansion
set "Liste="  
for /f "delims=-" %%i in ('dir /b archiv\*.txt^|find /n "."') do set "Liste=!Liste!%%i "  
set "Liste=%Liste:~,-1%"  
echo %Liste:]=] %
Alternativ dazu:
@echo off & setlocal enabledelayedexpansion
set "Liste="  
for /f "delims=" %%i in ('dir /b archiv\*.txt^|find /n "."') do set "Liste=!Liste!%%i "  
set "Liste=%Liste:-text-text.txt=%"  
set "Liste=%Liste:~,-1%"  
echo %Liste:]=] %
Nachteil der zweiten (exakteren) Methode: Die Anzahl der zu verabeitenden Dateinamen wird reduziert, da jeder Name wesentlich mehr Speicherplatz benötigt.

Die jeweils letzte Zeile dient nur der Erzeugung des Abstandes zwischen Nummer und Dateinamen und setzt voraus, dass es in den Dateinamen kein "]" gibt.

Grüße
bastla
RaNgErID
RaNgErID 04.01.2010 um 13:41:53 Uhr
Goto Top
Wow bastla,

Ich Danke dir wie verrückt, glaubst gar nicht wie lange ich da schon rum probiert habe, und deiner einer schreibt mir mal so eben in 5 min 2 Lösungen hin.

die zudem auch noch funktionieren.


- Edit -

deine 1. Lösung doch abwärts listen ?
nebeneinander da trennt er die Dateinamen auf die nächste Zeile das schaut nicht unbedingt Übersichtlich aus.

so wie es jetzt aufgelistet ist in deiner ersten Variante bloß doch abwärts listen, nicht nebeneinander.

[1] datei1
[2] datei2


mfG RaNgErID
bastla
bastla 04.01.2010 um 14:17:02 Uhr
Goto Top
Hallo RaNgErID!

Bei zeilenweiser Verarbeitung würde ich dann aber doch eher zu Variante 2 tendieren:
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b archiv\*.txt^|find /n "."') do (  
    set "Zeile=%%i"  
    set "Zeile=!Zeile:-text-text.txt=!"  
    echo !Zeile:]=] !
)
Grüße
bastla

P.S.: Es waren 9 Minuten ... face-wink
RaNgErID
RaNgErID 04.01.2010 um 14:52:05 Uhr
Goto Top
hmm 9 min ...

war aber schon nahe dran ^^

da kann ich nur mein Respekt aussprechen, ich habe es nicht an einem Tag geschafft.


also besten Dank für deine Hilfe.


Funktioniert erst mal soweit ...

mfG RaNgErID