बैच-फ़ाइल द्वारा लैन-डिवाइस को अक्षम / सक्षम करें: यदि तुलना काम नहीं कर रही है


1

मैंने यह .bat-file बनाई है जिसे उचित शॉर्टकट पर क्लिक करके, जिसे ठीक से कॉन्फ़िगर किया गया है लेकिन अंतिम दो तुलनाओं का मूल्यांकन ठीक से नहीं लगता है।

ये रहा।

@ECHO off
SETLOCAL EnableDelayedExpansion 

SET landevcename='Imagine any name for a device'

SET landevcestatus=0
SET landevcestatusDisab=0
SET landevcestatusConn=2
SET landevcestatusT="NONE"
SET landevceidx=0

SET counter=1

ECHO Lan device to be checked is: %landevcename%

FOR /F "tokens=1" %%I IN ('wmic PATH win32_networkadapter where "Name=%landevcename%" get index')  DO ( 
        IF !counter!==2 SET /a landevceidx=%%I             

        SET /a counter+=1
     )
ECHO Index of local area connection is: %landevceidx%

SET /a counter=1
FOR /F "tokens=1" %%J IN ('wmic PATH win32_networkadapter where "Name=%landevcename%" get netconnectionstatus')  DO (       
                            IF !counter!==2 SET /a landevcestatus=%%J              

                            SET /a counter+=1
                           )

ECHO Status of local area connection is: %landevcestatus%                          

REM IF %landevcestatus%==%landevcestatusDisab% SET /a landevcestatusT=Disabled
IF %landevcestatus%==0 SET /a %landevcestatusT% "ItIsNotEnabled"

REM IF %landevcestatus%==%landevcestatusConn% SET /a landevcestatusT=Connected         
**IF %landevcestatus%==2 SET /a %landevcestatusT% "ItIsEnabled"**

ECHO Text - Status of local area connection is: %landevcestatusT%

ECHO Status of local area connection is: %landevcestatus%                          

CMD
@ECHO off

उन दोनों:

यदि%%

यदि%%

टाइपो कहां हो सकता है?


क्या आप मुझे मिल रही त्रुटियों को बता सकते हैं?
JohnnyVegas

ECHO पाठ - स्थानीय क्षेत्र कनेक्शन की स्थिति है:% LandevcestatusT% NONE है।
icbytes

क्या आप दो अलग-अलग कथन के बजाय IF / ELSE सेट करने का प्रयास कर सकते हैं? यह इस तरह के एक साधारण आउटपुट के लिए वास्तव में जटिल दिनचर्या है। समस्याएं IF स्टेटमेंट्स में हैं क्योंकि यह केवल शुरुआत में आपके द्वारा सेट किया गया वैरिएबल है - बाकी सब कुछ अनदेखा करना।
JohnnyVegas

आप दो अलग के बजाय इसका मतलब है? के लिए नहीं ?
icbytes

जवाबों:


2

टाइपो कहां हो सकता है?

  • आपके पास अनेक आपके बैच फ़ाइल में त्रुटियाँ।

  • आप स्पष्ट रूप से उलझन में हैं कि कैसे उपयोग करें set तथा set /a। कृपया पढ़ें सेट

  • यह भी आपको पढ़ने लायक होगा अपने बैच फ़ाइलों को डीबग करना

  • एक सामान्य अवलोकन - अपने इंडेंटेशन को ठीक करें (यह डिबगिंग को आसान बनाता है)।


सुधार

SET landevcename='Imagine any name for a device'

होना चाहिए:

SET landevcename="Imagine any name for a device"

यदि तुम प्रयोग करते हो ' तो आप से बचने की जरूरत है ' अपने में for आदेश।


IF !counter!==2 SET /a landevceidx=%%I

होना चाहिए:

IF !counter!==2 SET landevceidx=%%I

/a संख्यात्मक भावों के लिए प्रयोग किया जाता है नहीं स्ट्रिंग असाइनमेंट।


IF !counter!==2 SET /a landevcestatus=%%J 

होना चाहिए:

IF !counter!==2 SET landevcestatus=%%J

SET /a counter+=1

होना चाहिए:

SET /a "counter+=1"

IF %landevcestatus%==0 SET /a %landevcestatusT% "ItIsNotEnabled"

होना चाहिए:

IF %landevcestatus%==0 SET landevcestatusT="ItIsNotEnabled"

IF %landevcestatus%==2 SET /a %landevcestatusT% "ItIsEnabled"

होना चाहिए:

IF %landevcestatus%==2 SET landevcestatusT="ItIsEnabled"

FOR /F "tokens=1" %%I IN ('wmic PATH win32_networkadapter where "Name=%landevcename%" get index')  DO ( 

होना चाहिए:

FOR /F "tokens=1" %%I IN ('wmic PATH win32_networkadapter where Name^=%landevcename% get index')  DO ( 

तुम से बचने की जरूरत है = का उपयोग करते हुए ^, और निकालें " s (वे चर का हिस्सा हैं %landevcename% )।


सरलीकृत बैच फ़ाइल

आप वही कर सकते हैं जो आप सिंगल के साथ चाहते हैं for /f कमांड और कम चर। आपको एक इंडेक्स या एक काउंटर की आवश्यकता नहीं है।

निम्न बैच फ़ाइल का उपयोग करें और सेट करें landevicename के रूप में उपयुक्त।

LanStatus.cmd :

@echo off
setlocal 

set landevcename="Remote NDIS based Internet Sharing Device"

echo Lan device to be checked is: %landevcename%

rem skip first line
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1,2" %%i IN (`wmic PATH win32_networkadapter where Name^=%landevcename% get netconnectionstatus^, index ^| findstr /r /v "^$"`)  DO (  set landevceidx=%%i
  set landevcestatus=%%j       
  )

if %landevcestatus%==2 (
  set landevcestatusT="ItIsEnabled"
  ) else (
  set landevcestatusT="ItIsNotEnabled"
  )

echo Text - Status of local area connection is: %landevcestatusT%

echo Status of local area connection is: %landevcestatus%                        

echo Index of local area connection is: %landevceidx%

endlocal

उदाहरण आउटपुट :

F:\test>lanstatus
Lan device to be checked is: "Remote NDIS based Internet Sharing Device"
Text - Status of local area connection is: "ItIsEnabled"
Status of local area connection is: 2
Index of local area connection is: 17

आगे की पढाई

  • विंडोज सीएमडी कमांड लाइन का ए-जेड इंडेक्स - सभी चीजों के लिए एक उत्कृष्ट संदर्भ विंडोज सीएमडी लाइन संबंधित।
  • findstr - फाइलों में तार के लिए खोजें।
  • के लिए / एफ - दूसरे कमांड के परिणामों के खिलाफ लूप कमांड।
  • अगर - सशर्त रूप से एक कमांड करें।
  • सेट - प्रदर्शन, सेट, या CMD पर्यावरण चर को हटा दें। SET के साथ किए गए परिवर्तन वर्तमान CMD सत्र की अवधि के लिए ही रहेंगे।
  • wmic - विंडोज मैनेजमेंट इंस्ट्रूमेंटेशन कमांड।

SET landevcename = एक उपकरण के लिए किसी भी नाम की कल्पना करें "दोषपूर्ण दिखता है। हो सकता है, पहले उद्धरण भूल गए हों?
icbytes

उत्तर तय ...
DavidPostill

क्या आपने यह भी देखा, कि कभी-कभी / की जरूरत है, afaik, SetEnbleDelayesExpansion के कारण। मैं यह भी एक एसओ साइट से है, आंशिक रूप से ...
icbytes

/a इसके साथ कुछ नहीं करना है delayed expansion। यह अंकगणित के भावों के लिए है। कृपया मेरे द्वारा दी गई लिंक को पढ़ें।
DavidPostill

एक बार फिर से धन्यवाद, मैं भी कुछ समय के लिए उस साइट पर रहा हूं, अभी भी / क्योंकि यह ज्यादातर काम करने के लिए लग रहा था। वैसे भी, मैं आपकी सिफारिश के अनुसार स्क्रिप्ट को अपनाऊंगा, और जल्द ही परिणामों के साथ वापस आऊंगा।
icbytes
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.