Seite 1 von 1

Batch-Datei funktioniert nicht :(

Verfasst: 10. Feb 2010, 17:38
von Milan W10
@echo off
:A
set /A y = 1
echo %y%
if %y% <= 255:
ping 169.254.1.%y% && echo 169.254.1.y%>> ips.txt
set /A y = %y+1
echo 192.168.2.y%

GOTO A


er gibt mir leider nur das was im fettgedruckenteil steht aus, alles in kursiv ignoriert er
er soll im prinzip alle möglichen ips durch pingen und mir in die datei ips.txt reinschreiben welche vergeben sind

Re: Batch-Datei funktioniert nicht :(

Verfasst: 10. Feb 2010, 18:26
von CountZero
Schon eine weile her ... aber wenn mich nicht alles täuscht gibt es kein "<=" müsste irgend etwas in Richtung EQU oder LSS sein.

Re: Batch-Datei funktioniert nicht :(

Verfasst: 10. Feb 2010, 18:30
von Milan W10
an dem If-clause liegt es nicht ... wenn man ihn weglässt passiert genauso wenig/viel

Re: Batch-Datei funktioniert nicht :(

Verfasst: 10. Feb 2010, 19:02
von CountZero
lass doch mal das echo off weg und ruf das Script ggf von der Shell auf dann siehst du genau was es macht oder nicht ohne der "if"-Zeile tut es bei mir auf jeden Fall das was es soll bzw. was eben da steht.

Re: Batch-Datei funktioniert nicht :(

Verfasst: 11. Feb 2010, 04:52
von Arbiedz
Vielleicht ist LOGINventory eine Alternative (Windows Netzwerk Inventarisierung Software); bis 25 PC kostenlos. Die IP wird auch von Nicht-Windows-Maschinen registriert.
[Edit: bis zu 20 PC kostenlos]

Re: Batch-Datei funktioniert nicht :(

Verfasst: 11. Feb 2010, 07:45
von Nils
Du hast ein paar fehler drin gehabt:
  1. <= muss durch LEQ ersetztwerden
  2. Du hattest einige % zeichen vergessen
  3. bei if alles volgende mit klammern einschließen nicht mit doppelpunkten
  4. bei jeden schleifendurchlauf wurde y wieder auf 1 gesetzt
  5. ich würde beim ping noch das argument -n 1 angeben, da so jede IP nur einmal getestet wird, das geht schneller
ganz nebenbei wird so aber immer nur die aktuell geprüfte IP in deine datei geschrieben, egal ob es sie gibt oder nicht.

Code: Alles auswählen

@echo off
set /A y = 1
:A
echo %y%
if %y% LEQ 255 (
ping 169.254.1.%y% -n 1 && echo 169.254.1.%y%>> ips.txt
set /A y = %y%+1
echo 192.168.2.y%
GOTO A
)
Daher muss da noch eine %errorlevel% abfrage rein und da verschachtelte ifs nicht richtig gehen ne andere struktur:

Code: Alles auswählen

@echo off
set ip=192.168.3
set y = 1
:A
ping %ip%.%y% -n 1 >nul
if ERRORLEVEL 1 echo %ip%.%y%>> ips_frei.txt && echo %ip%.%y% Frei && goto b
echo %ip%.%y%>> ips_vergeben.txt
echo %ip%.%y% Vergeben
:b
	
set /A y = %y%+1
if %y% LEQ 255 GOTO A

echo Fertig
Das ist warscheinlich das was du haben wolltest.

Wenn du noch fragen hast frag.

Nils

Re: Batch-Datei funktioniert nicht :(

Verfasst: 11. Feb 2010, 20:18
von Milan W10
danke für das! aber: auf meinem lappi funkt das ganze i wie net ... gleiches betriebssystem etc
und er braucht ca 5 minuten ... kann man das beschleunigen ?

Re: Batch-Datei funktioniert nicht :(

Verfasst: 12. Feb 2010, 10:49
von CountZero
5 Minuten um 255 IPs per Ping Befehl zu prüfen halte ich aber für ganz moderat und auf diese Art und Weise wirst du da auch keine Geschwindigkeit raus holen, da musst du dann halt zu einem Tool zurück greifen was deinen Anforderungen näher kommt.

Um aber ein lokales Netzwerk durch zu prüfen sollte dies vollkommen ausreichend sein, etwas anderes wirst du ja hoffentlich nicht mit machen wollen :).

Allerdings ohne mich näher damit beschäftigt zu haben läuft da eindeutig was falsch (vermutlich bei der Auswertung des Errorlevel?!) - bei mir gibt es kein 192.168.3.x Netz mir wird aber fast jede IP als vergeben und ca jede 10. als Frei ausgegeben.

Re: Batch-Datei funktioniert nicht :(

Verfasst: 12. Feb 2010, 12:41
von Nils
Das eventuell alle IPs als belegt ausgegeben wird liegt warscheinlich an einem Router in deinem Netzwerk der immer antwortet "die adresse gibts nicht" dan bekommt ping eine antwort und denkt alles ist in ordnung und hat dann das errorlevel 0. Soetwas ann nur durch eine genauere analyse der rückgabe abgefangen werden.

etwas beschleunigen kann man es noch -w 100 beim ping angibt, allerdings werden dan bei langsamen Netzen alles was länger als 100ms zum antworten braucht als Frei eingestuft.

Nils