Batch Werd aus der Zeile nicht schlau...

Manaplayer

Cadet 4th Year
Registriert
Juni 2017
Beiträge
92
Hallöchen Leute. Ich hab hier ein Problem mit einer Zeile, in der eigentlich alles stimmen müsste, aber trotzdem jedesmal einen Fehler auslöst. Das Script soll ein winziger Hardwareschalter sein. Speziell für den Cardreader musste noch was spezielles mit eingebaut werden, weil er zwar aktiviert ist, wenn eingechaltet, aber eben nur wirklich erst auch im Gerätemanager angezeigt wird, wenn eine Karte drinsteckt (alles ok, nur soll eben schon aktiv anzeigen, nachdem ich ihn über das Schaltprogramm aktiviert hab)
Nun zu der Zeile - Alles geht perfekt, nur wenn Zeile 120 dazukommt, bricht das Programm jedesmal ab:


Code:
@ECHO off
TITLE "Hardware Schaltung"
MODE con lines=25 cols=33
CHCP 1252
SET Liste=%TEMP%\Hardware.txt
IF exist DevManView.exe (set DevMan=DevManView.exe) else (set DevMan="D:\Tools\Hardware Identität\Verwaltung\DevManView.exe")
CLS
:START
IF exist %TEMP%\Hardware.txt (del %Liste%)
Powercfg /devicequery all_devices >%Liste%
CLS
IF %COMPUTERNAME% == P7618 goto P7618
:P7618
SET IDA=
SET Lancheck=
SET USB3check=
SET Camcheck=
SET USB2check=
SET WLANceck=
SET Cardreadercheck=
SET BTcheck=
SET IntelAudio="HDAUDIO\FUNC_01&VEN_8086&DEV_2804&SUBSYS_80860101&REV_1000\4&3394E463&0&0301"
SET Lan="PCI\VEN_1969&DEV_1063&SUBSYS_10D217C0&REV_C0\FFC8620400262DFF00"
SET Usb3="PCI\VEN_1033&DEV_0194&SUBSYS_10D217C0&REV_04\FFFFFFFFFFFFFFFF00
SET Kamera="USB\VID_04F2&PID_B287&MI_00\7&3D068CF&0&0000"
SET Usb2="PCI\VEN_8086&DEV_3B3C&SUBSYS_10D217C0&REV_06\3&11583659&0&D0"
SET Wlan="PCI\VEN_8086&DEV_08AE&SUBSYS_10058086&REV_00\78929CFFFF02ACFA00"
SET CardReader="USB\VID_0BDA&PID_0138\20090516388200000"
SET Bluetooth="USB\VID_13D3&PID_3286\74F06DD6A0E7"
SET RootPort1="PCI\VEN_8086&DEV_3B42&SUBSYS_10D217C0&REV_06\3&11583659&0&E0"
SET RootPort2="PCI\VEN_8086&DEV_3B44&SUBSYS_10D217C0&REV_06\3&11583659&0&E1"
SET RootPort3="PCI\VEN_8086&DEV_3B46&SUBSYS_10D217C0&REV_06\3&11583659&0&E2"
SET RootPort4="PCI\VEN_8086&DEV_3B48&SUBSYS_10D217C0&REV_06\3&11583659&0&E3"
SET RootPort5="PCI\VEN_8086&DEV_3B4A&SUBSYS_10D217C0&REV_06\3&11583659&0&E4"
FINDSTR /x /c:"Intel(R) Display-Audio" %TEMP%\Hardware.txt
CLS
IF errorlevel 1 (
SET IDA=.
) else (
SET IDA="Intel Audio"
)
FINDSTR /x /c:"Qualcomm Atheros AR8131 PCI-E Gigabit Ethernet Controller (NDIS 6.30)" %Liste%
CLS
IF errorlevel 1 (
SET Lancheck=.
) else (
SET Lancheck=LAN0
)
FINDSTR /x /c:"USB-Root-Hub (USB 3.0)" %Liste%
CLS
IF errorlevel 1 (
SET USB3check=.
) else (
SET USB3check=USB3on
)
FINDSTR /x /c:"USB 2.0 Camera" %Liste%
CLS
IF errorlevel 1 (
SET Camcheck=.
) else (
SET Camcheck=CamOn
)
FINDSTR /x /c:"Intel(R) 5 Series/3400 Series Chipset Family USB Enhanced Host Controller - 3B3C" %Liste%
CLS
IF errorlevel 1 (
SET USB2check=.
) else (
SET USB2check=USB2On
)
FINDSTR /x /c:"Intel(R) Centrino(R) Wireless-N 100" %Liste%
CLS
IF errorlevel 1 (
SET WLANcheck=.
) else (
SET WLANcheck=WLANon
)
FINDSTR /x /c:"Realtek USB 2.0 Card Reader" %Liste%
CLS
IF errorlevel 1 (
SET Cardreadercheck=.
) else (
SET Cardreadercheck=CRon
)
FINDSTR /x /c:"Bluetooth USB module" %Liste%
CLS
IF errorlevel 1 (
SET BTcheck=.
) else (
SET BTcheck=BTon
)
IF %Cardreadercheck%==CRon (set CRcheckTwo=.)
ECHO.
ECHO 1 Alles optimiert deaktivert
ECHO 2 Intel Audio off
ECHO 3 LAN off
ECHO 4 USB3 off
ECHO 5 Kamera off
ECHO 6 USB2 off
ECHO 7 WLAN off
ECHO 8 Card reader off
ECHO 9 Bluetooth off
ECHO.
ECHO 10 Bluetooth on
ECHO 11 WLAN off - LAN on
ECHO 12 LAN off - WLAN on
ECHO 13 Intel Audio on
ECHO 14 USB3 on
ECHO 15 Kamera on
ECHO 16 Card reader on
ECHO 17 USB2 on
ECHO.
ECHO Aktivierte Hardware:
IF %IDA%=="Intel Audio" (echo Intel Audio)
IF %Lancheck%==LAN0 (echo LAN)
IF %USB3check%==USB3on (echo USB3)
IF %Camcheck%==CamOn (echo Cam)
IF %USB2check%==USB2On (echo USB2)
IF %WLANcheck%==WLANon (echo W-Lan)
IF %Cardreadercheck%==CRon (echo CardReader)
IF %CRcheckTwo%==CRonTwo (echo CardReader)
IF %BTcheck%==BTon (echo Bluetooth)
ECHO.
SET asw=0
SET /p asw=Was willst Du?
IF %asw%==1 goto P7618AllOFF
IF %asw%==2 goto P7618IntelAudioOFF
IF %asw%==3 goto P7618Usb3OFF
IF %asw%==4 goto P7618Usb3OFF
IF %asw%==5 goto P7618KameraOFF
IF %asw%==6 goto P7618Usb2OFF
IF %asw%==7 goto P7618WlanOFF
IF %asw%==8 goto P7618CardReaderOFF
IF %asw%==9 goto P7618BluetoothOFF
IF %asw%==10 goto P7618BluetoothON
IF %asw%==11 goto P7618LanOnWlanOFF
IF %asw%==12 goto P7618WlanOnLanOFF
IF %asw%==13 goto P7618IntelAudioON
IF %asw%==14 goto P7618Usb3ON
IF %asw%==15 goto P7618KameraON
IF %asw%==16 goto P7618CardReaderON
IF %asw%==17 goto P7618Usb2ON
:P7618IntelAudioOFF
START /wait "Intel Audio" %DevMan% /disable %IntelAudio%
GOTO START
:P7618WlanOnLanOFF
START /wait "LAN" %DevMan% /disable %Lan%
START /wait "Intel Root Port 3" %DevMan% /disable %RootPort3%
START /wait "Intel Root Port 5" %DevMan% /enable %RootPort5%
START /wait "WLAN" %DevMan% /enable %Wlan%
ECHO Denk an das Schaltprogramm!
pause
GOTO START
:P7618LanOnWlanOFF
START /wait "WLAN" %DevMan% /disable %Wlan%
START /wait "Intel Root Port 5" %DevMan% /disable %RootPort5%
START /wait "Intel Root Port 3" %DevMan% /enable %RootPort3%
START /wait "LAN" %DevMan% /enable %Lan%
GOTO START
:P7618Usb2OFF
START /wait "USB Port 1" %DevMan% /disable %Usb2%
GOTO START
:P7618BluetoothOFF
START /wait "Bluetooth" %DevMan% /disable %Bluetooth%
GOTO P7618Usb2OFF
:P7618Usb3OFF
START /wait "USB3" %DevMan% /disable %Usb3%
START /wait "Intel Root Port 4" %DevMan% /disable %RootPort4%
GOTO START
:P7618KameraOFF
START /wait "Kamera" %DevMan% /disable %Kamera%
GOTO P7618Usb2OFF
:P7618CardReaderOFF
START /wait "Card reader" %DevMan% /disable %CardReader%
SET CRcheckTwo=
TIMEOUT /t 3 /nobreak
GOTO P7618Usb2OFF
:P7618BluetoothON
START /wait "USB Port 1" %DevMan% /enable %Usb2%
START /wait "Bluetooth" %DevMan% /enable %Bluetooth%
ECHO Denk an das Schaltprogramm!
pause
GOTO START
:P7618LanOFF
START /wait "LAN" %DevMan% /disable %Lan%
START /wait "Intel Root Port 3" %DevMan% /disable %RootPort3%
GOTO START
:P7618WlanOFF
START /wait "WLAN" %DevMan% /disable %Wlan%
START /wait "Intel Root Port 5" %DevMan% /disable %RootPort5%
GOTO START
:P7618IntelAudioON
START /wait "Intel Audio" %DevMan% /enable %IntelAudio%
GOTO START
:P7618Usb3ON
START /wait "Intel Root Port 4" %DevMan% /enable %RootPort4%
START /wait "USB3" %DevMan% /enable %Usb3%
GOTO START
:P7618KameraON
START /wait "USB Port 1" %DevMan% /enable %Usb2%
START /wait "Kamera" %DevMan% /enable %Kamera%
ECHO Denk an das Schaltprogramm!
pause
GOTO START
:P7618CardReaderON
START /wait "USB Port 1" %DevMan% /enable %Usb2%
START /wait "Card reader" %DevMan% /enable %CardReader%
SET CRcheckTwo=CRonTwo
GOTO START
:P7618Usb2ON
START /b /wait "USB Port 1" %DevMan% /enable %Usb2%
GOTO START
:P7618AllOFF
START /wait "Intel Audio" %DevMan% /disable %IntelAudio%
START /wait "Bluetooth" %DevMan% /disable %Bluetooth%
START /wait "USB3" %DevMan% /disable %Usb3%
START /wait "Kamera" %DevMan% /disable %Kamera%
START /wait "Card reader" %DevMan% /disable %CardReader%
SET CRcheckTwo=
START /wait "USB Port 1" %DevMan% /disable %Usb2%
START /wait "LAN" %DevMan% /disable %Lan%
START /wait "Wlan" %DevMan% /disable %Wlan%
START /wait "Intel Root Port 1" %DevMan% /disable %RootPort1%
START /wait "Intel Root Port 2" %DevMan% /disable %RootPort2%
START /wait "Intel Root Port 3" %DevMan% /disable %RootPort3%
START /wait "Intel Root Port 4" %DevMan% /disable %RootPort4%
START /wait "Intel Root Port 5" %DevMan% /disable %RootPort5%
GOTO START

Hat jemand eine Idee was daran falsch sein soll?
 
Zuletzt bearbeitet:
Hi,

das lese ich mir so sicher nicht durch!

1. Pack das bitte in Code Tags
2. Welche Zeile ist die problematische?
3. Was hast du schon versucht, um das Problem zu lösen?

VG,
Mad
 
Bevor ich mir das antue nutz bitte die "Einfügen->Code"-Funktion des Forums um den Code darzustellen. Außerdem wäre es schön wenn du die betroffene Zeile extra nennen bzw. im Code markieren könntest. Vielleicht wird das aber auch alleine durch die Code-Tags schon ersichtlicher.

Edit: Madman1209 war schneller, und wohl auch übersichtlicher ;)
 
Spontan würde ich sagen, dass %CRcheckTwo% leer ist. Kannst zum 'debuggen' ja mal
Code:
echo %CRcheckTwo%  &pause

davorschalten. Geschrieben hätte ich es auch eher so:
Code:
IF "%CRcheckTwo%"=="CRonTwo" echo CardReader
 
Ok, sorry, kannte die neuen Funktionen hier noch nicht. Habs editiert.
Und klar hab ich schon geschaut was an der Zeile verkehrt sein soll - Wenn sie raus ist, läuft alles ok.
Ergänzung ()

Tatsächlich :)
Mit
IF "%CRcheckTwo%"=="CRonTwo" echo CardReader
also mit Oberstrichen geht es - Aber kann mir auch einer erklären wieso? Die ganzen anderen Checks liefen doch auch ohne perfekt?
 
Die Shell ersetzt das %CRcheckTwo% In-Place. Im Endeffekt steht bei einer Leeren Variable dann:
Code:
IF =="CRonTwo" echo CardReader
was fehlerhaft ist. Bei der Variante zwei aufgelöst
Code:
IF "" =="CRonTwo" echo CardReader
 
CRonTwo wird nur unter einer bestimmten Bedingung vorher gesetzt, wenn ich das richtig gesehen habe. Wenn die nicht eintritt, ist Die Variable CRonTwo leer oder gar nicht da (ich bin jetzt nicht so der CMD Experte).

Aber generell kann man im Code sehen, dass du alle anderen Checks je nach ErrorLevel entweder explizit auf . oder auf den jeweiligen gewünschten Wert an dieser Stelle setzt. Die entsprechenden Variablen existieren also dementsprechend alle oder sind eben nicht ohne jeden Wert. CRonTwo hingegen wird nur unter einer bestimmten Bedingung gesetzt und besitzt keinen else Fall.

In Zeile 120 sollte sie aber zumindest vorhanden sein, denn du greifst explizit drauf zu, was dann halt fehlschlägt, wenn sie nicht da ist.

Das wäre meine Vermutung, was da schief läuft.

edit: Außerdem ist das "set" in der Zeile die ich meine (91) klein geschrieben, müsste das nicht SET sein? Vielleicht ein weiteres Problem. Wie gesagt, bin kein CMD Experte
 
Zuletzt bearbeitet:
Danke euch, Leute :) Alles funktioniert jetzt.
Das mit dem, das dieser "Cardreadercheck" zweimal etwas unterschiedlich vorkommt ist deswegen, weil alle tatsächlich aktivierten Geräte aus einer Liste vom Gerätemanager ausgelesen und dann überprüft wird.
Speziell bei dem Cardreader ist es aber so, dass dieser zwar aktiviert sein kann, aber erst wirklich angezeigt wird, sobald eine Karte auch drinsteckt. So hab ich dass dann gemacht, wenn der Cardreader vom Programm aktiviert wird aber keine Karte drinsteckt, dass dieser trotzdem als "Cardreader standby" angezeigt wird.
Aber was da mit den Oberstrichen falsch war hab ich jetzt auch verstanden, danke :)
 
Zurück
Oben