我正在使用IF语句在尝试更改计算机名称之前检查计算机是否已加入域。我有2个代码块。
此阻止块在任何Windows 7或更高版本上都没有问题。但是在重命名之前不提供任何检查。
@echo off
set /P "UserInput=Enter New Computer Name: "
wmic computersystem where name="%computername%" call Rename name="%UserInput%"
pause
但是此代码块总是以错误
退出 @echo off
IF \\%computername%==%logonserver% (
echo \\%computername% == %logonserver%
set /P "UserInput=Enter New Computer Name: "
pause
wmic computersystem where name="%computername%" call Rename name="%UserInput%"
pause
) ELSE (
echo This computer may be DomainJoined contact your System Administrator
pause
)
在IF中比较之后的回波严格来说是这样,所以我可以验证输出。它用于调试,并且为了清楚起见而添加。这是实际的代码,没有任何省略。
错误是
错误:
说明=无效的方法参数
如果我强制比较失败。 ELSE
语句运行。我不认为错误出在IF/ELSE
答案 0 :(得分:1)
为了消除延迟变量扩展的需要,这是您的问题,您可以消除将代码的这一部分包含在If
块中的需要:
@Echo Off
If /I Not "\\%COMPUTERNAME%"=="%logonserver%" (
Echo This computer may be DomainJoined; contact your System Administrator
Pause
Exit /B
)
Set /P "UserInput=Enter a new name for this computer: "
Pause
WMIC ComputerSystem Where "Not Name='%UserInput%'" Call Rename "Name='%UserInput%'"
Pause
您还可以考虑通过添加其他If
过滤器来完全删除Where
块:
@Echo Off
Set /P "UserInput=Enter a new name for this computer: "
Pause
WMIC ComputerSystem Where "Not Name='%UserInput%' And Not Name='%logonserver:~2%'" Call Rename "Name='%UserInput%'"
Pause
最终用户可以自由键入任何内容或他们希望的任何内容;我强烈建议您在考虑重命名系统之前,对该输入执行某种验证。 在允许的命名约定,禁止的字符甚至粗鲁或令人反感的字符串方面,肯定是最重要的。