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

Batch file WMIC将计算机名称更改为BIOS序列号的命令,batch-file,wmic,Batch File,Wmic,我是批处理文件和wmic的新手,在研究StackOverflow之后,我发现很少有答案重叠,但放在一起时不会产生预期的输出 问题: 创建批处理文件以更改计算机名(不在域上): 使用wmic bios get serialnumber并将值分配给变量comp_name,然后显示该变量的值 将计算机名称更改为变量的值comp_name 因此,对于1: FOR /F %%F IN ('wmic bios get serialnumber') DO ( SET comp_name=%%F ) ECHO

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

问题:

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

  • 使用
    wmic bios get serialnumber
    并将值分配给变量
    comp_name
    ,然后显示该变量的值
  • 将计算机名称更改为变量的值
    comp_name
    因此,对于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>
    
    即-
    SerialNumber
    字符串,后跟新行中的实际序列号,最后一行只有空行。所以(我希望)最后一个问题-请如何只为我的变量指定第二个值?

    只要您的bios序列是有效的计算机名,下面的问题就应该解决:

    @Echo关闭
    对于/F“Skip=1 Delims=“%%A In('WMIC Bios获取序列号'
    )为/F“Delims=“%%B In”(“%%%A”)执行Do调用:RenPC%%B
    退出/B
    :RenPC
    WMIC计算机系统的名称=“%$1”调用重命名名称=“%$1”
    

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

    请尝试使用此批处理代码:

    @Echo关闭
    对于('WMIC Bios Get SerialNumber/Value')中的/F“tokens=2 Delims=”%%A(
    对于/F“Delims=“%%B In(“%%A”)Do(
    调用:重命名EPC“%%B”
    呼叫:Ask4Reboot
    )
    )
    暂停并退出/B
    ::**********************************************************************
    :重命名EPC
    WMIC ComputerSystem其中Name=“%ComputerName%”调用重命名名称=“%1”
    退出/B
    ::***********************************************************************
    :ask4重新启动
    (
    echo Set Ws=CreateObject(“wscript.shell”^)
    echo Answ=MsgBox(“您想重新启动计算机吗?”_
    echo,VbYesNo+VbQuestion,“是否要重新启动计算机?”^)
    如果Answ=VbYes,则回显
    echo Return=Ws.Run(“cmd/c shutdown-r-t 60-c”“您需要在1分钟内重新启动。”“-f”,0,True^)
    回声
    echo wscript.Quit(1^)
    回显结束If
    )>%tmp%\%~n0.vbs
    启动“”%tmp%\%~n0.vbs”
    
    在此处找到此批次:

    曾为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
    
    setlocal
    wmic bios获取serialnumber |查找/I/V“serialnumber”>%temp%\sn.txt
    
    set/p comp_name=在
    ECHO%@comp_name%
    中的
    @
    符号是一个打字错误,对吗?为什么在
    name=%%comp\u name%%
    中使用双倍的
    %
    符号?在
    FOR/F
    循环中,您需要将
    wmic
    命令行括在
    '
    中,如
    ('wmic bios get serialnumber')
    ,然后删除
    USEBACKQ
    选项!确定首先编辑忘记@在变量声明期间
    @
    内容在整个问题中仍然不一致;我会干脆把它拿走。。。另一件事:我认为
    wmic
    没有
    rename
    动词,也许你的意思是
    set
    ;无论如何,
    Name
    属性是只读的,所以你不会像这样成功…为问题的语法道歉-我会做更多的研究并更新问题/问题。我不理解否决票-我已经按照的指示,将所有内容放在一起,仍然会出错..哪一位不起作用,第一个循环不检索序列号,第二个循环不提取变量,第二个循环不执行重命名,重命名不会在重新启动时持续。(我以前遇到过
    !=
    的问题,也许尝试
    可以解决它)。这是“Where Name!=”%*”。根据我有限的测试,选择本地系统的更好方法如下所示:“Where Name=“%ComputerName%”
    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