Hallo Forum, Meine txt-datei (errors) sieht wie folgt aus: :: "Cheyene: Laufwerk C" - (IP: 192.168.1.2) :: "Nala: Laufwerk C" - (IP: 192.168.1.3) :: "Nala: Ordner Manu" - (IP: 192.168.1.3) je nach dem ist auch nur eine zeile vorhanden.. nun brauche ich die IPs in den Klammern in verschiedenen vars: %IP1%, %IP2% etc.. mit for /f sollte das doch gehen.. aber ich kriegs nicht hin. irgendwie die letzten 12 stellen einer zeile minus das letzte. hoffe auf tipps
fonsana schrieb: > Welches OS? Wegen for /f tippe ich auf Windows. Ich würde mir diesen Batchmurks nicht mehr antun, Perl und Co. haben so schöne RegexEngines und alles was das Herz begehrt - sogar plattformunabhängig!
ja windows xp und 7 muss auf beidem gehen würde es am liebsten mit batch machen, da ich schon den rest des progs fertig hab, nur diese eine "aktion" muss noch sein. :D
zum verständnis:
1 | REM echo .......................................................... |
2 | echo ::ERROR "Verbindung zu folgenden Geraeten fehlgeschlagen" |
3 | echo .......................................................... |
4 | if exist %errorfile% ( type %errorfile% ) else ( echo Unbekannter Fehler ) |
5 | echo .......................................................... |
6 | echo\ |
7 | echo\ |
8 | if exist %errorfile% del %errorfile% |
9 | if exist %errorbak% del %errorbak% |
10 | @ping -n 1 localhost> nul |
11 | :Frage |
12 | choice /T 600 /D n /m "Nochmals versuchen zu verbinden? (in 10 Min.: Nein)" |
13 | if %errorlevel% GEQ 3 goto Frage |
14 | if %errorlevel% == 2 goto WahlN |
15 | if %errorlevel% == 1 goto WahlJ |
16 | ECHO Ungueltige Antwort, nur (J N) & goto Frage |
17 | :WahlN |
18 | goto Ende |
19 | :WahlJ |
20 | start connet_chey.bat |
21 | :Ende |
22 | exit |
bei ja will ich anstatt die ganze bat von vorher (die die errors ausgab) nochmals zu starten, eine neue starten und die error-ip's mitgeben..
Statt das mit einer Batchdatei zu erledigen, könntest Du auch VBscript verwenden - der dafür erforderliche Interpreter cscript ist seit längerem Bestandteil von Windows, und die Stringverarbeitungsmöglichkeiten von VBscript sind denen des /for/-Befehls des Kommandozeileninterpreters doch ziemlich überlegen.
Oder "JScript", Microsofts Interpretation von JavaScript. Geht auch mit cscript, aber ohne die räudige Syntax von VB. Okay, Ansichtssache, aber sollte zumindest der Vollständigkeit halber erwähnt sein :-) Ansonsten natürlich PowerShell, die ist zumindest bei Win 7 eh dabei, lässt sich unter XP nachinstallieren. Nativer als Perl & co (die ich ansonsten auch vorziehen würde). Mit Batch direkt geht's bestimmt auch - irgendwie. Aber wird ein Krampf. Falls Du Einfluss auf das Format der Textdatei hast, wäre ein erster Schritt, die inkonsistenten Feldtrenner und -begrenzungen zu vereinheitlichen - "" um die Bezeichnung, () um die IP etc. Ich glaub Leerzeichen als Trenner ging mit for irgendwie. Schwierig bis unmöglich wird's eben bei Feldern, die selber Leerzeichen enthalten, wo die "" als Begrenzung ausgewertet werden müssen. Da hilft ein anderes Trennzeichen, das garantiert nicht im Text selbst vorkommt. Oder eben ein vernünftiger Parser. Perl, evtl. auch mit Text::Balanced etc.
Psy_ schrieb: > irgendwie die letzten 12 stellen einer zeile minus das letzte. Frag mich bitte nicht warum aber das hier scheint zu funktionieren...
1 | @echo off |
2 | setlocal ENABLEDELAYEDEXPANSION |
3 | for /f "delims=" %%l in (forum.txt) do ( |
4 | set ip1=%%l |
5 | set ip2=!ip1:~-12! |
6 | set ip3=!ip2:~0,11! |
7 | echo !ip3! |
8 | ) |
9 | |
10 | rem aufräumen... |
11 | set ip1= |
12 | set ip2= |
13 | set ip3= |
MEINE FRESSE! Eine Stunde hab ich gebraucht, unter massivem Google und /? Einsatz... Wenn ich überlege dass das in Perl 2 min braucht, naja.
troll schrieb: > Frag mich bitte nicht warum aber das hier scheint zu funktionieren... > ... > MEINE FRESSE! Eine Stunde hab ich gebraucht, unter massivem Google und > /? Einsatz... Wenn ich überlege dass das in Perl 2 min braucht, naja. Danke dir vielmals! Das hilft mir enorm weiter!
1 | for /f "delims=" %%l in (errorfile.txt) do ( |
2 | set ip1=%%l |
3 | set ip2=!ip1:~-12! |
4 | set ip3=!ip2:~0,11! |
5 | echo !ip3! |
6 | pause |
7 | if "!ip3!"=="%IPNala%" call :test1 |
8 | if "!ip3!"=="%IPpcunten%" call :test2 |
9 | ) |
10 | REM .... |
11 | :test2 |
12 | echo "!ip3!" |
13 | net use Z: \\%ip%\C |
14 | if %errorlevel% GEQ 1 ( |
15 | call :subr2 |
16 | ) |
17 | REM weitere verarbeitung... |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.