Batch Probleme mit Variablen und Zeichentfernung aus Variablen

conf_t

Admiral
Registriert
Juni 2008
Beiträge
8.773
Hi,
ich klimpere gerade ein Batch-Skript zusammen, bei dem unter bestimmten Bedingungen ein Routeneintrag am Ende geändert wird. Die Bedingen sind ein LTE Stick mit einer bestimmten (bekannten MAC). Leider ändert sich die letzte Stelle der MAC je nach USB-Port. Also können nur 5 von 6 Hex-Stellen der MAC berücksichtig werden. Ferner wird für die Änderung der Route die Interface ID der reguären NIC benötigt. Die kann sich offenbar seit Wind 10 (Win8 auch?) offenbar auch mal von Reboot zu Reboot ändern. Bei Win 7 war das immer fest das IF 11. Letzters habe ich hinbekommen, beim ersteren scheitere ich irgendwie beim kürzen der ausgelesenen MAC um 3 Stellen, damit sie mit der Vorgabe vergleichbar wird.

Der in der erste FOR-Schleife ermittelte Wert beinhaltet ein vorangestelltes Leerzeichen, was ebenfalls entfernt werden muss.

Ich finde leider im Internet leider nur einfache Beispiele zu diesen String-Operationen, aber leider sind sie nicht so übertragbar. Also ich mache hier definitiv was falsch, aber ich bin nicht geübt genug mit Batch um das zu sehen.
Es darf auch gerne Powershell sein, aber davon habe ich noch weniger Ahnung. :(

Mein Problem ist in Zeile 9-14 zu finden. Die Zuweisung der Laufvariable einer anderen Variable haut nicht hin. Die Variable bleibt leer.

Code:
REM Abfrage ob LTE-Stick steckt
setlocal enabledelayedexpansion
REM LTE Adapter finden
cls
set "stick=00-A0-C6-00-00"
set "stickfound=false"
echo Debuginfo %stick%  
FOR /F "usebackq tokens=2 delims=:" %%m IN (`ipconfig /all`) DO (
   echo Debuginfo  %%m
   set phy=%%m
   echo Debuginfo  %phy%
   echo Debuginfo %phy:~1,-3%
   set phy=%phy:~1,-3%
   echo Debuginfo  %phy%
   IF "%phy%" == "%stick%" (
          set "stickfound=true"
          GOTO idfinder
    )
)
GOTO eof

REM Interface ID ermitteln (nötig für Routinganpassungen)
:idfinder

FOR /F "usebackq tokens=1,5 delims= " %%a IN (`netsh interface ipv4 show interfaces`) DO (
echo %%a %%b 
 IF %%b EQU Ethernet IF %%a LEQ 9 (
    set "interfaceid=%%a"
    GOTO ahead
    )
)
:ahead
echo InterfaceID %interfaceid%
echo Adapter gefunden %stickfound%

REM Route anpassen
route ADD 192.168.3.0 mask 255.255.255.0 192.168.2.1 METRIC 52 IF %interfaceid%

:eof

Ich hoffe ich war verständlich genug und schon mal Danke vorab für eure Antworten.
 
Zuletzt bearbeitet:
Das mache ich auch. Aber mein Fehler steckt primär in Zeilen 9-14. Da hilft Pause auch nicht, wenn ich die Variablen offensichtlich falsch bediene.
 
Dein Problem ist die Nutzung von Variablen innerhalb einer Schleife, Du setzt zwar richtigerweise enabledelayedexpansion aber nutzt dann nicht das ! für den Variablenzugriff. Du musst also innerhalb der Schleife !phy! an Stelle von %phy% nutzen.
 
Du triffst genau meine Vermutung - dass ich die Variablen falsch benutze.
Ich habe davon gelesen und es auch bereits getestet, aber vielleicht mich zu blöd angestellt.
Danke, werde ich nochmal testen.
 
Zurück
Oben