我正在尝试在需要时将批处理文件写入映射驱动器,但是每当我运行它时,我都会收到错误消息:
(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))
除了拼写错误的 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
然后使用IF ERRORLEVEL
来测试返回的错误级别,而无需变量扩展。请注意,if errorlevel 3
如果错误级别大于或等于 3 ,则为 TRUE。因此,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 强制正确响应。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句