首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将计算机名更改为BIOS序列号的WMIC命令

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

Stack Overflow用户
提问于 2016-11-08 11:22:41
回答 3查看 20.8K关注 0票数 1

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

问题:

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

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

因此,1.:

代码语言:javascript
运行
复制
FOR /F %%F IN ('wmic bios get serialnumber') DO (
SET comp_name=%%F
)
ECHO %comp_name%

其次是2.:

代码语言:javascript
运行
复制
WMIC computersystem where name="%computername%" rename name=%%comp_name%%

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

代码语言:javascript
运行
复制
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

“你为什么在name=%%comp_name%%中使用双倍%的符号?”通过aschipfl -我回到了我最初的问题-使用了双%,现在得到了不同的错误- 87,这告诉我更多的问题。使用单曲%会产生上面列出的错误。我不确定问题是发生在单一的、双倍的%或其他地方。

编辑.3

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

代码语言:javascript
运行
复制
C:\Windows\system32>wmic bios get serialnumber
SerialNumber
BY3VF02

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

EN

回答 3

Stack Overflow用户

发布于 2016-11-08 16:16:52

尝试使用以下批处理代码:

代码语言:javascript
运行
复制
@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"
票数 2
EN

Stack Overflow用户

发布于 2019-01-18 00:12:27

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

曾为Win 10 Ent v1803工作。如果您需要前缀etc,只需在变量前面/后面添加名称即可。

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2016-11-08 14:49:45

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

代码语言:javascript
运行
复制
@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"

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40485627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档