Problem mit for - Token falsch befüllt?
Hier mal die Ausgangslage.
scanlog.txt
Batch File
Ausgabe
Nun meine Frage:
Wieso kommt in der ausgabe immer "rcvd" vor? In der for schleife wird doch extra abgefragt, ob %%e nicht leer ist.
Kann mir das einer erklären und wie ich das Problem weg bekomme?
Und wo Ich doch schon mit Probemen komme, hat viellcht noch jemand ne Idee wie ich die Ports austeigend dastellen lassen kann?
Also so: Closed ports: 20 21 23 444
und nicht so: Closed ports: 23 21 20 444
Aber erstmal muß das rcvd weg.
scanlog.txt
hinkelstein [192.168.1.1] 23 (telnet): connection refused
hinkelstein [192.168.1.1] 22 (?) open
hinkelstein [192.168.1.1] 21 (ftp): connection refused
hinkelstein [192.168.1.1] 20 (ftp-data): connection refused
hinkelstein [192.168.1.1] 53 (domain) open
hinkelstein [192.168.1.1] 445 (microsoft-ds) open
hinkelstein [192.168.1.1] 444 (?): connection refused
hinkelstein [192.168.1.1] 443 (https) open
sent 0, rcvd 0
Batch File
@echo off
set file=scanlog.txt
FOR /F "tokens=1,2,3,4,5*" %%a in (%file%) do (
if not %%e=="" (
if not %%e==open (
echo Port %%c %%e %%f
call :closed %%c
)
)
)
echo Closed ports: %closed%
:closed
if defined closed (set closed=%closed% %1) else (set closed=%1)
goto :eof
Ausgabe
Port 23 connection refused
Port 21 connection refused
Port 20 connection refused
Port 444 connection refused
Port rcvd
Closed ports: 23 21 20 444 rcvd
Nun meine Frage:
Wieso kommt in der ausgabe immer "rcvd" vor? In der for schleife wird doch extra abgefragt, ob %%e nicht leer ist.
Kann mir das einer erklären und wie ich das Problem weg bekomme?
Und wo Ich doch schon mit Probemen komme, hat viellcht noch jemand ne Idee wie ich die Ports austeigend dastellen lassen kann?
Also so: Closed ports: 20 21 23 444
und nicht so: Closed ports: 23 21 20 444
Aber erstmal muß das rcvd weg.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80898
Url: https://administrator.de/forum/problem-mit-for-token-falsch-befuellt-80898.html
Ausgedruckt am: 22.12.2024 um 09:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
tausche einfach den Schleifenkörper aus:
Somit werden alle Zeilen berücksichtigt, in denen das Wort "rvcd" nicht vorkommt.
Zur Sortierungwunsch kann ich dir leider nichts sagen...Batch ist eher so nebenher. *g* Dazu gibt es andere hier im Forum.
Grüße
Dani
tausche einfach den Schleifenkörper aus:
...
FOR /F "tokens=1,2,3,4,5*" %%a in ('type "%file%" ^| findstr /i /v "rcvd"') do (
....
Zur Sortierungwunsch kann ich dir leider nichts sagen...Batch ist eher so nebenher. *g* Dazu gibt es andere hier im Forum.
Grüße
Dani
Das mit der Portsortierung sollte so gehen:
@echo off
set file=scanlog.txt
set tempfile="%temp%\sorttemp.txt"
if exist %tempfile% del %tempfile%
FOR /F "tokens=1,2,3,4,5*" %%a in (%file%) do (
if not %%e=="" (
if not %%e==open (
echo Port %%c %%e %%f
echo %%c>>%tempfile%
)
)
)
set "closed="
FOR /F "delims=" %%i in ('sort %tempfile%') do call set "closed=%%closed%%%%i"
del %tempfile%
echo Closed ports: %closed%