(net은 이때 예상치 못한 일이었습니다.

(net은 이때 예상치 못한 일이었습니다.

필요할 때 맵 드라이브에 배치 파일을 작성하려고 하는데 실행할 때마다 오류가 발생합니다.

(net was unexpected at this time

@echo off
SET /P Site=Which site you want to map please type SITE CODE? 
IF %Site% == BPT ( SET /P Drive= C B G?
        IF  %Driv% == C (net use * \\test1\common)
        IF  %Driv% == G (net use * \\test1\global)
        IF %Drive% == B (net use * \\test1\common && net use * \\test1\global))

답변1

철자가 틀린 DRIV(vs DRIVE) 외에도 확장 지연 문제가 있습니다.

전체 IF 구성은 코드가 실행되기 전에 한 번에 모두 구문 분석되는 단일 복합 문으로 처리됩니다. 이는 괄호로 묶인 모든 코드 블록에 해당됩니다.

명령문이 완전히 구문 분석되기 전에 확장 비율이 발생하므로 DRIVE는 아직 정의되지 않았으며 두 번째 IF 문은 다음과 같이 읽혀집니다.

IF   == C (net use * \\test1\common)

구문 오류가 어떻게 발생하는지 확인할 수 있어야 합니다.

한 가지 해결책은 지연된 확장을 활성화 !drive!하고 %drive%. 이렇게 하면 전체 명령문이 구문 분석되고 각 명령이 실행되기 직전에 변수가 확장됩니다.

@echo off
setlocal enableDelayedExpansion
SET /P Site=Which site you want to map please type SITE CODE? 
IF %Site% == BPT ( 
  SET /P Drive= C B G?
  IF !Drive! == C net use * \\test1\common
  IF !Drive! == G net use * \\test1\global
  IF !Drive! == B net use * \\test1\common && net use * \\test1\global
)

또 다른 옵션은 GOTO 또는 CALL을 사용하여 괄호 안에 있는 큰 블록을 제거한 다음 안전하게 백분율 확장을 사용할 수 있는 것입니다.

@echo off
SET /P Site=Which site you want to map please type SITE CODE? 
IF %Site% neq BPT goto NotBPT 
SET /P Drive= C B G?
IF %Drive% == C net use * \\test1\common
IF %Drive% == G net use * \\test1\global
IF %Drive% == B net use * \\test1\common && net use * \\test1\global
:NotBPT

또 다른 옵션은 변수 확장 없이 반환된 오류 수준을 테스트하는 데 CHOICE대신 SET /P사용하는 것 입니다. 오류 수준이 3보다 크거나 같으면 TRUE입니다. 따라서 IF 테스트는 숫자 내림차순으로 수행되어야 합니다 IF ERRORLEVEL.if errorlevel 3

@echo off
SET /P Site=Which site you want to map please type SITE CODE? 
IF %Site% == BPT ( 
  choice /c CBG
  if errorlevel 3 (
    net use * \\test1\global
  ) else if errorlevel 2 (
    net use * \\test1\common
    net use * \\test1\global
  ) else if errorlevel 1 (
    net use * \\test1\common
  )
)

SET /P에 비해 CHOICE의 장점 중 하나는 사용자가 잘못된 응답을 입력하는 것에 대해 걱정할 필요가 없다는 것입니다. CHOICE는 올바른 응답을 강제합니다.

관련 정보