(net war zu diesem Zeitpunkt unerwartet

(net war zu diesem Zeitpunkt unerwartet

Ich versuche bei Bedarf eine Batchdatei auf das zugeordnete Laufwerk zu schreiben, aber jedes Mal, wenn ich sie ausführe, erhalte ich eine Fehlermeldung:

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

Antwort1

Abgesehen von Ihrem Rechtschreibfehler DRIV (im Gegensatz zu DRIVE) liegt bei Ihnen ein Problem mit der verzögerten Erweiterung vor.

Ihre gesamte IF-Konstruktion wird als eine einzige zusammengesetzte Anweisung behandelt, die auf einmal analysiert wird, bevor Code ausgeführt wird. Dies gilt für jeden Codeblock in Klammern.

Die Prozenterweiterung erfolgt, bevor die Anweisung vollständig analysiert wurde. Daher ist DRIVE noch nicht definiert und Ihre zweite IF-Anweisung wird wie folgt gelesen:

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

Sie sollten erkennen können, dass dadurch ein Syntaxfehler entsteht.

Eine Lösung besteht darin, die verzögerte Erweiterung zu aktivieren und !drive!anstelle von zu verwenden %drive%. Auf diese Weise wird die gesamte Anweisung analysiert und die Variable unmittelbar vor der Ausführung jedes Befehls erweitert.

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

Eine weitere Möglichkeit besteht darin, GOTO oder CALL zu verwenden, um den großen Block in Klammern zu entfernen. Anschließend können Sie problemlos die Prozenterweiterung verwenden.

@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

Eine andere Möglichkeit besteht darin, CHOICEanstelle von zu verwenden SET /Pund dann zu verwenden IF ERRORLEVEL, um den zurückgegebenen Fehlerlevel zu testen, ohne dass eine Variablenerweiterung erforderlich ist. Beachten Sie, dass if errorlevel 3TRUE ist, wenn der Fehlerlevel größer oder gleich 3 ist. Daher müssen die IF-Tests in absteigender numerischer Reihenfolge durchgeführt werden.

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

Ein Vorteil von CHOICE gegenüber SET /P besteht darin, dass Sie sich keine Sorgen darüber machen müssen, dass Benutzer eine falsche Antwort eingeben – CHOICE erzwingt eine korrekte Antwort.

verwandte Informationen