christiank
Goto Top

Problem mit for - Token falsch befüllt?

Hier mal die Ausgangslage.

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.

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

miniversum
miniversum 16.02.2008 um 14:16:07 Uhr
Goto Top
Weil du dann nichts mit "" vergleichst. Ändere die Bedingung mal so:
if not "%%e"=="" (
oder so:
if "%%e" neq "" (

miniversum
Dani
Dani 16.02.2008 um 14:28:36 Uhr
Goto Top
Hallo,
tausche einfach den Schleifenkörper aus:
...
FOR /F "tokens=1,2,3,4,5*" %%a in ('type "%file%" ^| findstr /i /v "rcvd"') do (  
....
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
miniversum
miniversum 16.02.2008 um 14:30:45 Uhr
Goto Top
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%
christiank
christiank 16.02.2008 um 18:55:04 Uhr
Goto Top
Hat wie immer super geklappt.
Ich bin begeistert.