在批处理脚本中使用WMIC重命名PC的问题

时间:2018-06-28 02:40:31

标签: batch-file cmd

我正在使用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

1 个答案:

答案 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

最终用户可以自由键入任何内容或他们希望的任何内容;我强烈建议您在考虑重命名系统之前,对该输入执行某种验证。 在允许的命名约定,禁止的字符甚至粗鲁或令人反感的字符串方面,肯定是最重要的。