Forum: PC-Programmierung Wert aus TXT in Variable (Batch)


von Psy_ (Gast)


Lesenswert?

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

von fonsana (Gast)


Lesenswert?

Welches OS?

fonsana

von troll (Gast)


Lesenswert?

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!

von Psy_ (Gast)


Lesenswert?

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

von Psy_ (Gast)


Lesenswert?

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..

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Malte S. (maltest)


Lesenswert?

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.

von troll (Gast)


Lesenswert?

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.

von Psy_ (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.