2014-11-26 2 views
0

호스트 된 네트워크를 재구성하거나 시작하기위한 UI를위한 배치 코드가 있습니다. 디버깅하는 데 문제가 있습니다. if 문이 작동하지 않습니다. 아래를 참조하십시오 :배치로 호스트 된 네트워크 설정을 반자동으로 자동화하는 UI 만들기

@ECHO OFF 
REM Provide user interface. 
REM  Ask user if he would like to: 

REM   1. Re-Configure hosted network 
REM    i. Collect data for hosted Network. 
REM    ii. Provide status message letting user know if setup was successful. 

REM   2. Start Hosted Network 
REM    i. Provide Status message (Success or Failure). 

REM   3. Use timer to close application after completion. 
:Begin 

CLS 
COLOR 0A 

ECHO Please select one of the following options: 
ECHO 1. Re-Configure your hosted network. 
ECHO 2. Start your hosted network. 
ECHO 3. EXIT 
ECHO. 

SET /P choice=Choice: 

IF "%choice%" EQU 1 
    (
     GOTO :config 
    ) 
ELSE IF "%choice%" == 2 
    (
     GOTO :startUp 
    ) 
ELSE IF "%choice%" == 3 
    (
     GOTO :exit 
    ) 
ELSE 
    (
     CLS 
     COLOR 4E 

     ECHO INVALID SELECTION. PLEASE TRY AGAIN. 

     TIMEOUT /t 5 
     GOTO :Begin 
    ) 

:config 
ECHO Please enter the following information: 
SET /P sSID=SSID/Network Name: 
SET /P key=Network Password : 
SET /P start = Start Network (Y/N)? 

NETSH wlan SET hostednetwork mode=allow ssid="%sSID%" key="%key%" | FIND "  *successfully*" 
NETSH wlan SHOW hostednetwork 

IF /I "%start%"=="Y" GOTO :startUP 

GOTO :exit 

:startUp 
NETSH wlan START hostednetwork | FIND "The hosted network started." 
GOTO :exit 

:exit 
ECHO Exiting 
FOR /L %Counter IN (0,1,9) DO 
    (
     TIMEOUT /t 1000 
     ECHO . 
    ) 

pause 

Windows 8.1을 사용하고 있습니다.

또한 누군가가 파일 관리자 권한을 부여하는 코드를 추가하고 find 명령문에서 오류 메시지를 표시하는 IF 문으로 파이프하는 방법을 보여 주면 실제로 실패 할 경우 감사하게됩니다.

답변

0

괄호가 잘못되어 처음으로 If 명령이 실패합니다. 또한 변수 주위에는 따옴표가 있지만 값은 아닙니다. 마지막으로 GOTO에서는 : 레이블을 사용하지 마십시오.

일부 set 명령은 변수에 공백을 넣었으므로 변수를 사용할 때 오류가 발생할 수 있습니다. 공백을 삭제했습니다. 일반적으로 여분의 공백 (에코 없음)에주의하십시오. 특히 SET 명령에서주의하십시오.

find 명령의 결과를 평가하는 방법이 추가되었습니다. 문자열을 포함하는 행을 계산하고 결과가 0이면 문자열을 찾을 수 없습니다 - 실패. 관리자 권한으로 파일을 실행하는 다양한 방법이 있지만 배치 내에서 코드를 사용하는 것은 아닙니다. 에서

@echo off 
    REM Provide user interface. 
    REM  Ask user if he would like to: 

    REM   1. Re-Configure hosted network 
    REM    i. Collect data for hosted Network. 
    REM    ii. Provide status message letting user know if setup was successful. 

    REM   2. Start Hosted Network 
    REM    i. Provide Status message (Success or Failure). 

    REM   3. Use timer to close application after completion. 
:Begin 
    CLS 
    COLOR 0A 
      ECHO Please select one of the following options: 
      ECHO 1. Re-Configure your hosted network. 
      ECHO 2. Start your hosted network. 
      ECHO 3. EXIT 
      ECHO. 
     SET /P choice=Choice: 
      IF %choice% EQU 1 (
       GOTO config 
      ) ELSE (
       IF %choice% EQU 2 (
       GOTO startUp 
      ) ELSE (
       IF %choice% EQU 3 (
       GOTO exit 
      ) ELSE (
       CLS 
       COLOR 4E 
       ECHO INVALID SELECTION. PLEASE TRY AGAIN. 
       TIMEOUT /t 5 
       GOTO Begin 
      ))) 

:config 
     ECHO Please enter the following information: 
     SET /P "sSID=SSID/Network Name:" 
     SET /P "key=Network Password:" 
     SET /P "start=Start Network (Y/N)?" 
     :: Confirm user typed y or n 
      If /i not %start%==y echo.>nul &&If /i not %start%==n echo You didn't type y or n &&goto config 
     REM NOTE: WILL USER EVER TYPE "N"? If yes, you know they get back here per goto at end (endless loop) 

     rem Set var only because length of command 
     Set NETSHwlan=NETSH wlan SET hostednetwork mode=allow ssid="%sSID%" key="%key%" 
      For /f %%I in ('%NETSHwlan%^| FIND "*successfully*" /c') do (
       If %%I GTR 0 (
        echo Success 
       ) else (
        echo Failure 
       ) 
      ) 

     NETSH wlan SHOW hostednetwork 
     IF /I "%start%"=="Y" GOTO startUP 
     GOTO config 

:startUp 
    For /f %%I in ('NETSH wlan START hostednetwork^| FIND "The hosted network started." /c') do (
      If %%I GTR 0 (
       echo Success 
      ) else (
       echo Failure 
      ) 
    ) 
    GOTO exit 

:exit 
    ECHO Exiting 
     FOR /L %Counter IN (0,1,9) DO (
      TIMEOUT /t 1000 
      ECHO. 
      ) 
    pause 
    exit 

참조 REM 참고 : 무한 루프에 대한 설정

나는 당신의 카운터가 작동합니다 생각하지 않습니다. 네가하려는 일을 잘 모르겠다. 검색을 통해 몇 가지 효과적인 방법을 찾을 수 있습니다.