sinsizer
Goto Top

Variable aus Schleife

Hallo, erstmal hat mir das Forum bis jetzt sehr geholfen, unglaublich viele und gute Informationen.
Allerdings habe ich ein kleines Problem wo ich einfach nicht weiter komme.

for /L %%i in (1,1,%anzahl%) do set /p url=URL %%i:& echo !url! >> temp1.txt & ping -n 1 !url! >> temp.txt
for /F "tokens=3,9 delims==<: " %%f in ('findstr "TTL" temp.txt') do if %%g LSS 80 (echo %%f Unix/Linux >> scan.txt & echo. >> scan.txt) else (echo %%f Windows >> scan.txt & echo. >> scan.txt)  

Ich möchte in die scan.txt die vom user bestimmten URLs vor oder über den entsprechenden IPs ausgeben.

Probleme:
1. Die Variable url befindet sich in einer Schleife, die kann ich nicht nutzen. (wird ja nur der letzte wert gespeichert)
2. habe die urls in eine extra Datei geschrieben um sie von dort einzufügen, allerdings weiß ich nicht wie ich die einzelnen Zeilen auslesen und zuordnen kann.
3. Die for /F in der for /L Schleife führt zu einer steigenden Wiederholung der Ausgabe in der scan.txt. Geht also auch nicht.
4. Versuche ich in der schleife for /F den entsprechenden token aus einer anderen Zeile der temp.txt auszulesen wird der natürlich aus beiden Zeilen gelesen. (3,9 sind in der selben Zeile)

Jetzt weiß ich wie es nicht geht face-smile

Wäre toll wenn mir da jemand einen Tip oder eine Lösung geben kann.
Gerne auch zu einer besseren Formatierung oder anderer Lösungsweg.

Vielen Dank.

Content-Key: 174589

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

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: Skyemugen
Skyemugen 13.10.2011, aktualisiert am 27.10.2011 um 13:16:13 Uhr
Goto Top
Aloha,

in etwa so (?)

@echo off & setlocal enabledelayedexpansion
set /a "anzahl=2"  
for /L %%i in (1,1,%anzahl%) do (
	set /p url=URL %%i:
	for /F "tokens=3,9 delims==^<: " %%f in ('ping -n 1 !url!^|findstr "TTL"') do (  
		if %%g LSS 80 (
		>>scan.txt (echo !url!
				echo %%f Unix/Linux)
		) else (
		>>scan.txt (echo !url!
				echo %%f Windows
				echo.)
		)
	)
)
pause

greetz André

P.S. Frühstück!
Mitglied: sinsizer
sinsizer 13.10.2011 um 15:57:14 Uhr
Goto Top
Super, Danke für die schnelle Antwort.

Genau so hab ich mir das vorgestellt.
Leider wäre ich garnicht auf die Idee gekommen die Schleife so aufzubauen.
Wusste z.b. nicht das ">>scan.txt" auch davor stehen kann.


Da muss ich wohl noch was üben. face-smile
Mitglied: sinsizer
sinsizer 14.10.2011 um 09:45:36 Uhr
Goto Top
Sorry, aber ich muss nochmal Fragen.

Wenn ich jetzt "ping -a" benutze und den Hostnamen noch ausgeben will, liegt der in einer anderen Zeile so das ich nicht einzeln ran komme.
So siehts bis jetzt aus.
for /L %%i in (%start%,1,%ende%) do (
	for /F "tokens=5" %%f in ('ping -a -n 1 %IP%.%%i ^>temp.txt ^& findstr "TTL [" temp.txt') do (  
		for /F "tokens=3,7,9 delims==<: " %%a in ('findstr "TTL" temp.txt') do (  
			if %%c LSS 35 ( 
						>>scan2.txt (echo %%f Zeit=%%b %%a Windows95/WindowsNT) 
									echo. >> scan2.txt

Habe so leider bei jedem Durchlauf eine überflüssige Zeile drin.
Mitglied: Skyemugen
Skyemugen 14.10.2011 um 10:23:13 Uhr
Goto Top
Aloha,

sorry aber ich habe, ehrlich gesagt, heute keine Lust mich in dein Chaos hineinzudenken, zumal du wieder mit temp.txt arbeitest und teilweise falscher for-Zusammenstellung, dass ich schon nicht mehr blicke welche Werte du eigentlich ausgeben haben willst.

Also mach' es uns beiden doch leichter: Wie ich vermute, ist das letzter für das interne Netzwerk(?), welche Werte / Informationen willst du aus dem ping ausgegeben wissen? Denn Zeile 02 z.B. gibt 32 aus, ob du das so willst ... (?)

greetz André


egal, ich werf' dir jetzt einfach mal etwas hin ...

@echo off & setlocal
set /a "start=10"  
set /a "ende=15"  
set "IP=192.168.100"  
for /L %%i in (%start%,1,%ende%) do (
	for /f "tokens=3,5,7,9 delims==:^< " %%a in ('ping -a -n 1 %IP%.%%i^|findstr "TTL"') do (  
		if %%d LSS 35 >>scan.txt (echo %%a Bytes=%%b Zeit=%%c Windows95/WindowsNT && echo.)		
		)
	)
)
pause
Mitglied: sinsizer
sinsizer 14.10.2011 um 12:14:52 Uhr
Goto Top
Kein Problem, verstehe mich manchmal selber nicht. face-wink

Das Ding war/ist das der Hostname, der bei "ping -a" vor der IP ausgegeben wird, in einer anderen Zeile steht als der Rest.

Habs jetzt so gelöst:
(findstr  /B /V "Zeit" scan2.txt) >> log2.txt  

Ist zwar ziemlich "unsauber" da ich in 2 extra Dateien schreibe, die wieder gelöscht werden, aber solange kein Hostname mit "Zeit" beginnt funktionierts.

Zu deinen Fragen: Ja, ist fürs interne. Der Wert ist so gewollt um grob Rückschlüsse auf das verwendete OS ziehen zu können.