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-Key: 95742

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

Printed on: April 19, 2024 at 14:04 o'clock

Member: bastla
bastla Sep 01, 2008 at 04:58:54 (UTC)
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
Member: blacksun
blacksun Sep 01, 2008 at 14:32:58 (UTC)
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
Member: RaNgErID
RaNgErID Dec 19, 2009 at 16:26:41 (UTC)
Goto Top
Hallo bastla,

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

mfG RaNgErID
Member: bastla
bastla Dec 19, 2009 at 16:32:38 (UTC)
Goto Top
Hallo RaNgErID!


Grüße
bastla
Member: RaNgErID
RaNgErID Dec 19, 2009 at 19:12:11 (UTC)
Goto Top
Besten Dank bastla


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

mfg RaNgErID
Member: RaNgErID
RaNgErID Jan 04, 2010 at 11:41:44 (UTC)
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
Member: bastla
bastla Jan 04, 2010 at 12:01:39 (UTC)
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
Member: RaNgErID
RaNgErID Jan 04, 2010 at 12:41:53 (UTC)
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
Member: bastla
bastla Jan 04, 2010 at 13:17:02 (UTC)
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
Member: RaNgErID
RaNgErID Jan 04, 2010 at 13:52:05 (UTC)
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