WMIC命令将计算机名称更改为BIOS序列号

时间:2016-11-08 11:22:41

标签: batch-file wmic

我是批处理文件和wmic的新手,在研究StackOverflow之后,我发现很少有答案重叠,但在放在一起时却没有产生预期的输出。

问题:

创建批处理文件以更改计算机名称(不在域上):

  1. 使用wmic bios get serialnumber并将值分配给变量comp_name,然后显示此变量的值;
  2. 将计算机名称更改为变量comp_name;
  3. 的值

    所以1:

    FOR /F %%F IN ('wmic bios get serialnumber') DO (
    SET comp_name=%%F
    )
    ECHO %comp_name%
    

    接下来是2.:

    WMIC computersystem where name="%computername%" rename name=%%comp_name%%
    

    编辑:得到1.部分正确 - 按预期工作 - 获取序列号并显示变量的值。但是第2部分仍然会抛出错误:

    O:\>wmic computersystem where name="TOM-PC" rename NAME=
    Invalid named parameter list.
    Hint: <named param list> ::= <named param> | <named param> <named param list> where <named param> ::= <param name>=<param value>
    

    如果我理解正确 - 最后一个命令的NAME=...部分不会识别上面初始化的变量。那么如何使用comp_name作为wmic命令的参数?

    编辑.2

    &#34;为什么在name = %% comp_name %%中使用双倍%符号?&#34;通过aschipfl - 我恢复了我原来的问题 - 使用了双%,现在得到了不同的错误 - 87这告诉了我更多关于这个问题的信息。使用单个%会产生上面列出的错误。我不确定问题是单个还是双倍%或其他地方。

    编辑.3

    进一步的研究表明,wmic bios get serialnumber实际上在新行中返回三个值

    C:\Windows\system32>wmic bios get serialnumber
    SerialNumber
    BY3VF02
    

    即 - SerialNumber字符串,后跟新行中的实际序列号,最后一行只是空行。所以(我希望)最后的问题 - 如何只将第二个值分配给我的变量?

3 个答案:

答案 0 :(得分:1)

尝试使用此批处理代码:

@Echo Off
For /F "tokens=2 Delims==" %%A In ('WMIC Bios Get SerialNumber /Value') Do (
    For /F "Delims=" %%B In ("%%A") Do (
        Call :RenamePC "%%B" 
        Call :Ask4Reboot
    )
)
pause & Exit /B
::**********************************************************************
:RenamePC
WMIC ComputerSystem where Name="%ComputerName%" call Rename Name="%~1"
Exit /B
::***********************************************************************
:Ask4Reboot
(
    echo    Set Ws = CreateObject("wscript.shell"^)
    echo    Answ = MsgBox("Did you want to reboot your computer ?"_
    echo ,VbYesNo+VbQuestion,"Did you want to reboot your computer ?"^)
    echo    If Answ = VbYes then 
    echo        Return = Ws.Run("cmd /c shutdown -r -t 60 -c ""You need to reboot in 1 minute."" -f",0,True^)
    echo    Else
    echo        wscript.Quit(1^)
    echo    End If
)>"%tmp%\%~n0.vbs"
Start "" "%tmp%\%~n0.vbs"

答案 1 :(得分:0)

以下,只要您的bios序列是有效的计算机名称,就应该这样做:

@Echo Off
For /F "Skip=1 Delims=" %%A In ('WMIC Bios Get SerialNumber'
    ) Do For /F "Delims=" %%B In ("%%A") Do Call :RenPC %%B
Exit/B
:RenPC
WMIC ComputerSystem Where Name!="%~1" Call Rename Name="%~1"

在新名称生效之前,必须重新启动电脑。

答案 2 :(得分:0)

在这里找到此批次: https://community.spiceworks.com/topic/1912255-batch-file-to-use-wmic-commands-to-change-computer-name

曾效力于Win 10 Ent v1803。 如果需要前缀等,只需在变量之前/之后添加名称。

setlocal
wmic bios get serialnumber | find /I /V "SerialNumber" > "%temp%\sn.txt"
set /p comp_name=<"%temp%\sn.txt"
wmic computersystem where name="%computername%" rename name=%comp_name%
del "%temp%\sn.txt"
endlocal