Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

For-Schleife Fortlaufende Variablen

Frage Entwicklung Batch & Shell

Mitglied: kkboy94

kkboy94 (Level 1) - Jetzt verbinden

05.07.2010 um 13:52 Uhr, 4962 Aufrufe, 9 Kommentare

Ich habe schon in anderen Threads nachgesehen, Dr. Google bemüht, aber entweder hab ich nicht die richtigen Suchworte gefunden oder es sind nicht die passenden Probleme aufgetreten.

So nun aber zu meinem Problem:
01.
rem Es wird als erstes eine Variable durch die Benutzereingabe gesetzt. 
02.
set /p Zahlen=Ziffern eingeben (durch Komma getrennt. Es werden nur die ersten 4 zeichen beruecksichtigt) (Bsp.:44,88,468,421): 
03.
rem Nun wird diese Variable in einer For /f Konstruktion weiterverwertet und wieder getrennt. 
04.
for /f "tokens=1-4 delims=,"  %%a in ("%Zahlen%") do  call :test %%a %%b %%c %%d 
05.
 
06.
rem Jetzt werden die einzelnen Parameter in Variablen gesetzt und angezeigt  
07.
:test 
08.
set var1=%:~1 
09.
set var1=%:~2 
10.
set var1=%:~3 
11.
set var1=%:~4 
12.
echo %var1% %var2% %var3% %var4% 
13.
pause
Ist es möglich diese ganze Konstruktion ohne Parameter, -vielleicht mit einer zweiten for-Schleife-, zu schreiben?

Danke für alle Tipps die ich bekomme

MfG Karsten
Mitglied: bastla
05.07.2010 um 15:10 Uhr
Hallo Karsten!

Soferne nicht (viel) mehr als das Anzeigen passieren soll, würde ja natürlich die direkte Verwendung der Schleifenvariablen, etwa in der Art:
for /f "tokens=1-4 delims=,"  %%a in ("%Zahlen%") do  echo %%a %%b %%c %%d 
als Zeile 4 genügen ...

... aber was mit "ohne Parameter" gemeint ist, kann ich mir jetzt nicht so richtig vorstellen ...

Was ist denn letztlich der Endzweck der ganzen Aktion?

Grüße
bastla
Bitte warten ..
Mitglied: kkboy94
05.07.2010 um 15:55 Uhr
Zitat von bastla:

... aber was mit "ohne Parameter" gemeint ist, kann ich mir jetzt nicht so richtig vorstellen ...
Damit meine ich den "Call"Befehl. Unter test sollte dann halt das gemacht werden, was du sicher auch noch lesen wirst^^

Was ist denn letztlich der Endzweck der ganzen Aktion?
Eigentlich, dass ich was lerne, aber in diesem Fall speziell soll dann für jede Zahl ein ping Befehl ausgeführt werden. Die Zahlen stellen jeweils den letzten Block der IP-Adresse an.


Und wenn wir schon dabei sind:
Kann man die Variable %Zahlen% so überprüfen, dass keine Zahl über 254 liegt?


Grüße
zurück
Bitte warten ..
Mitglied: sanixo
05.07.2010 um 15:56 Uhr
Hallo Karsten,

würde es nicht ausreichen, die SET Befehle gleich hinter der FOR-Schleife auszuführen?

01.
for /f "tokens=1-4 delims=,"  %%a in ("%Zahlen%") do (SET var1=%%a & SET var2=%%b & SET var3=%%c & SET var4=%%d)
Gruß, Dennis
Bitte warten ..
Mitglied: kkboy94
05.07.2010 um 15:57 Uhr
Hmm Danke, war mein Internet wieder etwas langsam, deshalb:
Siehe oben
Bitte warten ..
Mitglied: bastla
05.07.2010 um 16:02 Uhr
Hallo Karsten!

Natürlich kannst Du die "for"-Schleife auch so schreiben:
01.
for /f "tokens=1-4 delims=,"  %%a in ("%Zahlen%") do  ( 
02.
    echo %%a %%b %%c %%d 
03.
    if %%a leq 254 if %%b leq 254 if %%c leq 254 if %%d leq 254 ping %%a.%%b.%%c.%%d 
04.
)
Solange alles innerhalb des "do" (auch wenn es, wie in diesem Beispiel, über mehrere Zeilen verteilt ist) abgehandelt wird, brauchst Du eigentlich keine Zuweisung an andere Variablen vorzunehmen ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
05.07.2010 um 17:30 Uhr
Hallo kkboy,

in obigem Fall arbeitest Du am Besten ohne For-Schleife, sondern übergibst die Eingabe direkt an die Subroutine (die ist bei deinem Batch übrigends NICHT vom Hauptteil mit einem notwendigen Goto :Eof getrennt)

Der Call trennt die Argumente per Default an Leerzeichen Komma Semikolon und Tab.
Wenn du jetzt noch shift benutzt, kannst du eine beliebige Anzahl von Argumenten (nur durch die max Zeilenlänge begrenzt) verarbeiten.

Der Set /A mit "&"=binärem AND behält von der Zahl nur die untersten 8 Bit (0-255)
Wenn die Zahl davon abweicht, war es eine Fehleingabe.

01.
@Echo off&SetLocal 
02.
set /p Zahlen=Ziffern eingeben (durch Komma getrennt. Es werden nur die ersten 4 zeichen beruecksichtigt) (Bsp.:44,88,468,421): 
03.
Call :test %Zahlen% 
04.
Goto :Eof 
05.
:test 
06.
If "%~1" EQU "" goto :Eof 
07.
set /A "var=%~1 & 255" 
08.
If "%var%" EQU "%~1" ( 
09.
  Echo Ping  -n 1  x.y.z.%1 
10.
) Else ( 
11.
  Echo ungültiges Octet %1   
12.
)  
13.
Shift 
14.
Goto :test
Gruß
LotPings
Bitte warten ..
Mitglied: kkboy94
05.07.2010 um 19:30 Uhr
Danke an bastla und sanixo, für eure Vorschläge

Funktioniert einwandfrei deine Lösung, mal abgesehen, von dem "Echo" vor dem Ping.
Ich hab jetzt alles etwas verändert und wollte dann direkt noch den hostnamen mit reinbringen:
01.
@Echo off & SetLocal 
02.
echo. 
03.
set /p ipa=IP-Adresse eingeben (Bsp.:192.168.2):  
04.
echo. 
05.
echo Bitte Den letzten Block der IP eingeben (durch Komma getrennt) 
06.
echo Keine der Zahlen darf gr%oe%%ss%er als 254 sein --^> Bsp.: 44,68,241,55 
07.
set /p Zahlen=Zahlen nun eingeben:  
08.
Call :test %Zahlen% 
09.
 
10.
Goto :Eof 
11.
:test 
12.
If "%~1" EQU "" goto :Eof 
13.
set /A "var=%~1 & 255" 
14.
If "%var%" EQU "%~1" ( 
15.
Ping  -n 1  %ipa%.%1|find "TTL" 
16.
pause 
17.
for /f "tokens=2 delims= " %%A in ('ping -a %ipa%.%1 -n 1^|FIND "[%ipa%.%1]"') do ( 
18.
echo Die IP von "%%A" ist "%ipa%%1") 
19.
 
20.
) Else ( 
21.
  Echo ungültiges Octet %1   
22.
)  
23.
 
24.
Shift 
25.
pause 
26.
Goto :test 
27.
 
28.
::::::::::::::::::::::::::::::::::::: 
29.
 
30.
@Echo off&SetLocal 
31.
 >> %log%
Nur Zeile 17/18 funktioniert nicht so richtig.
Kann mir da noch jemand helfen.

MfG Karsten
Bitte warten ..
Mitglied: LotPings
05.07.2010 um 19:47 Uhr
Hallo Karsten,

ich will mich ja nicht mit fremden Federn schmücken, aber meine eigenen möchte ich schon noch behalten dürfen

In Zeile 17 ist hinten eine öffnende Klammer zu viel, verschiebe statt dessen den Inhalt von Z18 dahin.

Gruß
LotPings
Bitte warten ..
Mitglied: kkboy94
05.07.2010 um 19:55 Uhr
Ja ist schon klar, ich hab ja auch nur geringfügige Sachen verändert, (x.y.z. durch %ipa% ausgetauscht ; Das 'find "TTL"' hinter "Ping" gesetzt und "Echo" vor "Ping" gelöscht ; Den Text für die Variable %Zahlen% geändert)


In meiner Batch hab ich das auch so wie mir geheißen , aber hier passte das nicht alles in eine Zeile. Und außerdem schließ die Klammer doch Ende Zeile 18 wieder.


MfG Karsten
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Weitergabe von Variablen in for-Schleifen
Frage von MFJustBatch & Shell1 Kommentar

Hallo, Ich versuche HTML Dateien in PDFs umzuwandeln (dies funktioniert) und diese dabei nach Teilen dieser HTML Datei umzubenennen ...

Batch & Shell
Batch Variablen in for-Schleife
gelöst Frage von Dacki1107Batch & Shell2 Kommentare

Hallo Liebe Administratoren Ich kämpfe mit einem kleinen Problemchen und hoffe das Ihr mir helfen könnt. Ich versuche eine ...

Batch & Shell
For schleife mit variablem inhalt
gelöst Frage von Tealk144Batch & Shell5 Kommentare

Hallo zusammen, kann ich in einer Batch Datei folgendes schreiben? for Variable in Satz do ( if exist %buchstabe%: ...

Batch & Shell
For-Schleife und Variablen durch nummerieren
gelöst Frage von NagusBatch & Shell18 Kommentare

Moin, ich stehe mal wieder auf dem Schlauch und sehe die Lösung nicht so sieht grob der code aus. ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless8 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...