Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Permanente Routing-Tabelle sichern. (Batch)

Frage Microsoft

Mitglied: WinlinMac

WinlinMac (Level 1) - Jetzt verbinden

13.10.2010 um 18:06 Uhr, 6341 Aufrufe, 5 Kommentare

Ich schreibe hier und da Batches zur Simplifizierung von häufigen Abläufen. Sowohl für Windows, Linux/Mac OS x. Allerdings waren alle bisher für meine Verhältnisse relativ einfach zu machen.
Jetzt habe ich ein Problem das ich nicht ohne Fremde Hilfe lösen kann, weil mir die Routine fehlt:

Ich möchte eine Batch schreiben, die die permanenten Routen in einer Textdatei speichert und zwar in der Formatierung ("IP";"MASK";"Gateway";"Metric"):
"0.0.0.0;0.0.0.0;192.168.1.1;20"

Ich habe bisher lediglich einen Skript, der die in dieser Form formatierten Einträge wieder auslesen und in einer Batch schreiben kann, allerdings ist das nach meinem empfinden auch keine Kunst.

Ich bin mal auf eure antworten gespannt. Ich habe bisher immer wieder gute Anregungen auf dieser Seite gefunden.
Mitglied: Pjordorf
13.10.2010 um 18:11 Uhr
Auch dir Hallo entgegen gebracht!

Zitat von WinlinMac:
("IP";"MASK";"Gateway";"Metric"):
"0.0.0.0;0.0.0.0;192.168.1.1;20"
Äh, was denn jetzt?
"IP";"MASK";"Gateway";"Metric" oder "IP;MASK;Gateway;Metric"?

Ich habe bisher lediglich einen Skript, der die in dieser Form formatierten Einträge wieder auslesen und in einer Batch
schreiben kann
???

Ich bin mal auf eure antworten gespannt.
Na, ob das alles deinen Erwartungen trifft?

Was hast du den bisher in deiner Batchdatei stehen?

Peter
Bitte warten ..
Mitglied: WinlinMac
13.10.2010 um 18:17 Uhr
Also erstens mein Skript zum auslesen sieht so aus:


@echo off
for /F "tokens=1-15,1-15,1-15,1-15 delims=;" %%i in (portsnow.list) Do echo route -p add %%i mask %%j %%k metric %%l >>doll.cmd
echo pause >>doll.cmd
pause


portsnow.list enthält:

0.0.0.0;0.0.0.0;192.168.1.2;22
0.0.0.0;0.0.0.0;192.168.1.1;20



Jetzt brauche ich ein Skript um den output von route print in die form von portsnow.list zu bekommen ist jetzt alles klar?
Bitte warten ..
Mitglied: Friemler
13.10.2010 um 19:49 Uhr
Hallo WinlinMac,

Zitat von WinlinMac:
Jetzt brauche ich ein Skript um den output von route print in die form von portsnow.list zu bekommen

dafür sollte folgendes genügen (wenn noch keine statischen Routen definiert sind):
01.
for /f "skip=1 tokens=1-3,5" %%a in ('route print ^| findstr /r /c:"^ .*"') do ( 
02.
  if "%%a" neq "Keine" echo %%a;%%b;%%c;%%d>>portsnow.list 
03.
)
Dein Skript zum Auslesen von portsnow.list würde ich eher so schreiben:
01.
for /F "usebackq tokens=1-4 delims=;" %%i in ("portsnow.list") do ( 
02.
  echo route -p add %%i mask %%j %%k metric %%l>>doll.cmd 
03.
04.
echo pause>>doll.cmd 
05.
pause
Durch usebackq kann der Pfad zu portsnow.list auch Leerzeichen enthalten. Was Dein tokens=1-15,1-15,1-15,1-15 soll, verstehe ich nicht.

Gruß
Friemler
Bitte warten ..
Mitglied: WinlinMac
13.10.2010 um 20:11 Uhr
Danke funktioniert erstklassik,

MFG

Winlin

Thread gilt als gelöst
Bitte warten ..
Mitglied: Friemler
14.10.2010 um 15:16 Uhr
Hallo WinlinMac,

auf Deine Nachfrage per PN liefere ich die Erklärung zu meinem Schnipsel hier im Thread, damit auch andere etwas davon haben.

Zunächst mal die Ausgabe von ROUTE PRINT:
01.
=========================================================================== 
02.
Schnittstellenliste 
03.
0x1 ........................... MS TCP Loopback interface 
04.
0x2 ...0X XX XX XX XX XX ...... MAC-Brückenminiport - Paketplaner-Miniport 
05.
=========================================================================== 
06.
=========================================================================== 
07.
Aktive Routen: 
08.
     Netzwerkziel    Netzwerkmaske          Gateway   Schnittstelle  Anzahl 
09.
          0.0.0.0          0.0.0.0  192.168.XXX.XXX 192.168.XXX.XXX       20 
10.
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1 
11.
    192.168.XXX.0    255.255.255.0  192.168.XXX.XXX 192.168.XXX.XXX       20 
12.
  192.168.XXX.XXX  255.255.255.255        127.0.0.1       127.0.0.1       20 
13.
  192.168.XXX.255  255.255.255.255  192.168.XXX.XXX 192.168.XXX.XXX       20 
14.
        224.0.0.0        240.0.0.0  192.168.XXX.XXX 192.168.XXX.XXX       20 
15.
  255.255.255.255  255.255.255.255  192.168.XXX.XXX 192.168.XXX.XXX       1 
16.
Standardgateway:   192.168.XXX.XXX 
17.
=========================================================================== 
18.
Ständige Routen: 
19.
  Keine
Und Mein Schnipsel:
01.
for /f "skip=1 tokens=1-3,5" %%a in ('route print ^| findstr /r /c:"^ .*"') do ( 
02.
  if "%%a" neq "Keine" echo %%a;%%b;%%c;%%d>>portsnow.list 
03.
)
Die FOR /F Schleife zerlegt zeilenweise die Ausgabe des Befehls, der in der Klammer der Schleife zwischen einfachen Anführungszeichen angegeben wird (hier 'route print ^| findstr /r /c:"^ .*"'), in seine "Bestandteile" (Tokens). Dabei werden bestimmte Zeichen, die zusammen mit TOKENS= in den doppelten Anführungszeichen durch die Direktive DELIMS= festgelegt werden können, als Trennzeichen zwischen den Bestandteilen/Tokens betrachtet. Wenn DELIMS nicht angegeben wird, werden Leer- und Tabzeichen als Trennzeichen betrachtet, so auch in diesem Fall. Die Eingabe von FOR /? an der Kommandozeile liefert die Hilfe zum FOR-Befehl.

In der Ausgabe von ROUTE PRINT interessieren Dich die Zeilen 9-15 mit den Netzwerkadressen/-masken. Die Spalten Netzwerkziel, Netzwerkmaske, Gateway, Schnittstelle und Anzahl sind durch Leer- bzw. Tabzeichen getrennt (die Standard-Trennzeichen). Ohne Angabe von TOKENS=1-3,5 würde nur der Inhalt der Spalte Netzwerkziel zurückgeliefert und der Laufvariablen %%a zugewiesen (das 1. Token). Durch TOKENS=1-3,5 werden aber automatisch weitere Laufvariablen (%%b, %%c und %%d) erzeugt. Dabei enthält %%b den Inhalt der Spalte Netzwerkmaske (2. Token), %%c den Inhalt der Spalte Gateway (3. Token) und %%d den Inhalt der Spalte Anzahl (5. Token).

Damit von der Ausgabe von ROUTE PRINT nur die Zeilen 9-15 verarbeitet werden, wird die gesamte Ausgabe über eine Pipeline an den FINDSTR-Befehl weitergegeben. Dafür steht das ^|, wobei das ^ ein Escape-Zeichen für | ist, damit der Befehlsinterpreter die Zeile korrekt auswertet. Um den Befehl direkt an der Kommandozeile auszuführen, müsstest Du nur
route print | findstr /r /c:"^ .*"
eingeben. Durch die Parameter /r /c:"^ .*" wird dem FINDSTR-Befehl mitgeteilt, was er suchen soll. Durch /r wird festgelegt, das der Suchstring, trotz /c:, ein regulärer Ausdruck ist, denn /c: legt eigentlich fest, das nach dem Suchstring buchstabengetreu gesucht werden soll. "^ .*" ist der Suchstring. Dabei bedeutet das ^, das am Anfang einer Zeile gesucht werden soll. Gesucht werden soll nach einem Leerzeichen, dem beliebig viele beliebige Zeichen folgen (dafür das " .*"). Der Punkt steht für ein beliebiges Zeichen, der Stern für eine beliebig häufige Wiederholung des vorhergehenden Zeichen (wegen dem vorhergehenden Punkt also für das beliebig häufige Auftreten eines beliebigen Zeichens). Falls Dir das jetzt zu hoch ist , gib FINDSTR /? an der Kommandozeile ein, das liefert die Hilfe zum Befehl und experimentiere ein wenig mit FINDSTR herum.

Es wird also nach Zeilen gesucht, die mit einem Leerzeichen beginnen und diese ausgegeben, also von der FOR-Schleife verarbeitet. Darunter fallen auch die Zeile 8 mit den Spaltentiteln (Netzwerkziel, Netzwerkmaske, usw.) und die Zeile 19 mit dem Wort "Keine". Zeile 8 (in der Ausgabe des FINDSTR-Befehls die erste Zeile) wird durch SKIP=1 (überspringe die erste Zeile) herausgefiltert. Zeile 19 wird durch IF "%%a" NEQ "Keine" herausgefiltert, denn bei Verarbeitung dieser Zeile enthält %%a das Wort "Keine", das erste und einzige Token dieser Zeile.

PS:
Wenn ich es mir so recht überlege, frage ich mich, ob der Schnipsel wirklich nützlich für Dich ist. Du willst doch bestimmt die statischen Routen eines Rechners auslesen und auf einen anderen übertragen. Dann wären die Zeilen nach der Zeile 18 ("Ständige Routen") für dich interessant und das Skript müsste anders geschrieben werden. Und zwar so:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
for /f "delims=:" %%l in ('route print ^| findstr /n /r /c:"^Ständige Routen"') do ( 
06.
  set /a "skipLines=%%l+1" 
07.
08.
 
09.
for /f "skip=%skipLines% tokens=1-4" %%a in ('route print') do ( 
10.
  echo %%a;%%b;%%c;%%d>>portsnow.list 
11.
12.
 
13.
endlocal
In der ersten FOR-Schleife wird die Nummer der Zeile ermittelt, die mit "Ständige Routen" beginnt. FINDSTR gibt durch den Parameter /n vor dem Inhalt der Zeile die Zeilennummer gefolgt von einem Doppelpunkt aus, deshalb DELIMS=:. Die Laufvariable %%l enthält also die Zeilennummer der gesuchten Zeile, die um eins erhöht an die Variable skipLines zugewiesen wird. Dadurch wird auch die Zeile mit den Spaltenbezeichnungen der statischen Routen übersprungen. Der Parameter /a beim SET-Befehl ermöglicht es, auf der rechten Seite des Gleichheitszeichens Berechnungen durchzuführen.

In der zweiten FOR-Schleife wird durch SKIP=%skipLines% die entsprechende Anzahl Zeilen von der Ausgabe des ROUTE PRINT-Befehls übersprungen. Die Tabelle der statischen Routen wird durch TOKENS=1-4 und das fehlende DELIMS pro Zeile in vier Tokens zerlegt, die durch Leerzeichen getrennt sind und den Laufvariablen %%a, %%b, %%c und %%d zugewiesen werden.

Gruß
Friemler
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 7
gelöst Batch-Skript oder VBS Skript zum Sichern von Office Vorlagen (2)

Frage von Ceejaay zum Thema Windows 7 ...

Router & Routing
InterVlan Routing mit Linksys LRT224 Dual WAN Gigabit VPN Router (1)

Frage von darkliving zum Thema Router & Routing ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...