我是批处理文件和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>
如果我正确理解--最后一个命令的NAME=...
部分不识别上面初始化的变量。那么如何使用comp_name
作为wmic
命令的参数呢?
编辑.2
“你为什么在name=%%comp_name%%中使用双倍%的符号?”通过aschipfl
-我回到了我最初的问题-使用了双%
,现在得到了不同的错误- 87,这告诉我更多的问题。使用单曲%
会产生上面列出的错误。我不确定问题是发生在单一的、双倍的%
或其他地方。
编辑.3
进一步的研究表明,wmic bios get serialnumber
实际上在新行中返回三个值。
C:\Windows\system32>wmic bios get serialnumber
SerialNumber
BY3VF02
即- SerialNumber
字符串,后面是新行中的实际序列号,最后一行是空行。所以(我希望)最后的问题--如何只给我的变量分配第二个值?
发布于 2016-11-08 16:16:52
尝试使用以下批处理代码:
@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"
发布于 2019-01-18 00:12:27
曾为Win 10 Ent v1803工作。如果您需要前缀etc,只需在变量前面/后面添加名称即可。
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
发布于 2016-11-08 14:49:45
只要您的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"
在新名称生效之前,PC必须重新启动。
https://stackoverflow.com/questions/40485627
复制相似问题