Batch file WMIC将计算机名称更改为BIOS序列号的命令
我是批处理文件和wmic的新手,在研究StackOverflow之后,我发现很少有答案重叠,但放在一起时不会产生预期的输出 问题: 创建批处理文件以更改计算机名(不在域上):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 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