2017-06-22 20 views
0

我有用于命名机器的此脚本。这是我成功重新镜像一台机器后的自动重命名。每次做40或50时节省时间。创建脚本以使用命名方案重命名计算机

SETLOCAL ENABLEDELAYEDEXPANSION 
@ECHO OFF 
SET count=1 
SET campus=JOB 

FOR /F "tokens=* USEBACKQ" %%F IN (`wmic bios get serialnumber`) DO ( 
SET serialnumber!count!=%%F 
SET /a count=!count!+1 
) 

SET pcname=%campus%-%serialnumber2% 

ENDLOCAL 

WMIC computersystem where caption=%computername% rename %pcname% 

pause 

我有几个不同的校园,有3或4个字符的名称方案和使用设备的序列号。我想知道是否有一种方法可以找出%pcname%是否小于或等于15个字符,如果不是,那么将最后一个数字切掉等于15个字符?由于微软只允许15个字符作为计算机名,所以这个脚本应该考虑它。理论上。

回答

1

刚:

set pcname=%pcname:~0,15% 

如果它的时间越长,将板缺,如果不是会留下,因为它是

在您的代码:

SETLOCAL ENABLEDELAYEDEXPANSION 
@ECHO OFF 
SET count=1 
SET campus=JOB 

FOR /F "tokens=* USEBACKQ" %%F IN (`wmic bios get serialnumber`) DO ( 
SET serialnumber!count!=%%F 
SET /a count=!count!+1 
) 

SET pcname=%campus%-%serialnumber2% 

:: 
SET pcname=%pcname:~0,15% 
SET pcname=%pcname: =% 
:: 


WMIC computersystem where caption=%computername% rename %pcname% 

pause 

这应该做的伎俩!

+0

真棒,谢谢。这工作完美! –

+0

该命令的工作原理非常完美,但如果名称少于15个字符,则会在末尾添加空格。有没有办法不添加空间? –

+0

只需加上:'SET pcname =%pcname:=%'。编辑代码! – SachaDee

1
SET pcname=%campus%-%serialnumber2% 
set pcname=%pcname:~0,15% 
REM ENDLOCAL 

WMIC computersystem where caption=%computername% rename %pcname% 

endlocal将结束由前setlocal建立了当地的环境和丢弃从那时起环境所做的任何更改(如 - ...变化的变量的内容,例如)

+0

我有一个问题,我应该完全删除设置的本地? –

+0

绝对不是! (虽然在@echo off之后放*是常规操作)。调用delayedexpansion的唯一方法是使用setlocal来调用delayedexpansion(因为您正在修改代码块中的count并使用修改后的值)。此外,使用'setlocal'确保环境保持清洁,并且不会因运行批次而对环境所做的更改造成混乱。如果省略,则所做的更改将持续存在,因此您可以“继承”由完全不相关批次设置的变量。 – Magoo