我是新的批处理文件和wmic,并在研究StackOverflow后发现有几个答案重叠但不能产生预期输出时放在一起。将计算机名更改为BIOS序列号的WMIC命令
问题:
创建一个批处理文件来更改计算机名称(而不是在结构域):
使用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: ::= | where ::= =
如果我理解正确的是 - 最后命令的NAME=...部分不认变量初始化以上。那么如何使用comp_name作为wmic命令的参数呢?
编辑0.2
“你为什么要使用一倍名称%=迹象%% COMP_NAME %%?”通过aschipfl - 我恢复到我原来的问题 - 使用双%,现在得到不同的错误 - 87,这告诉我更多关于这个问题。使用单打%会产生上面列出的错误。我不确定问题出在单人还是双人%或其他地方。
编辑0.3
进一步研究表明wmic bios get serialnumber回报其实三个值中的每一个新行
C:\Windows\system32>wmic bios get serialnumber
SerialNumber
BY3VF02
那就是 - SerialNumber字符串,然后在新的生产线的实际序号和最后一个只空行。所以(我希望)最后的问题 - 如何只给我的变量分配第二个值?
2016-11-08
Traconis
+0
的'@''在ECHO%@ COMP_NAME%'符号是一个错字,对不对?为什么在'name = %% comp_name %%'中使用加倍的'%'符号?在你的'FOR/F'循环中,你需要将你的'wmic'命令行放在''''中,例如'('wmic bios get serialnumber')',并移除'USEBACKQ'选项! –
+0
确定第一次编辑在变量声明中忘记了@ –
+0
在你的问题中@ @东西仍然不一致;我会简单地删除它...另一件事:我认为'wmic'不具有'rename'动词,也许你的意思是'set';无论如何,'Name'属性是只读的,所以你不会像这样成功... –