Wert aus TXT in Variable (Batch)

Gast #3091376
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
Gast #3091490
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..
#3091556
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.
Gast #3091590
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.
Gast #3091909
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren