(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 (а не 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и затем использовать IF ERRORLEVELдля проверки возвращаемого уровня ошибки без необходимости расширения переменной. Обратите внимание, что if errorlevel 3TRUE, если уровень ошибки больше или равен 3. Поэтому тесты IF должны выполняться в порядке убывания чисел.

@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
  )
)

Одним из преимуществ CHOICE перед SET /P является то, что вам не нужно беспокоиться о том, что пользователи введут неправильный ответ — CHOICE заставляет дать правильный ответ.

Связанный контент