2017-06-22 4 views
0

J'ai ce script pour nommer une machine. C'est pour un renommage automatique après que j'ai réimagé avec succès une machine. Pour gagner du temps en faisant 40 ou 50 à la fois.Créer un script pour renommer l'ordinateur en utilisant un schéma de nommage

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 

J'ai plusieurs campus différents et avec soit un système de nom 3 ou 4 caractères et en utilisant le numéro de série de l'appareil. Je me demandais s'il y avait un moyen de savoir si le% pcname% est inférieur ou égal à 15 caractères, sinon, puis couper les derniers chiffres à 15 caractères? Microsoft n'autorisant que 15 caractères pour un nom d'ordinateur, ce script doit en tenir compte. En théorie.

Répondre

1

Just:

set pcname=%pcname:~0,15% 

Si son plus il sera cutted sinon il restera comme il est

Dans votre code:

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 

Cela devrait faire l'affaire!

+0

Impressionnant, merci . Cela a fonctionné parfait! –

+0

La commande fonctionne parfaitement mais si le nom est plus court que 15 caractères, il ajoute un espace à la fin. Y a-t-il un moyen de ne pas ajouter de l'espace? –

+0

ajoutez simplement ceci: 'SET pcname =% pcname: =%'. Edité le code! – SachaDee

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

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

Le endlocal mettra fin à l'environnement local mis en place par le précédent setlocal et annuler les modifications apportées à l'environnement depuis (comme - l'évolution du contenu des variables, par exemple ...)

+0

J'ai une question, dois-je supprimer l'ensemble local entièrement? –

+0

Absolument pas! (Bien qu'il soit conventionnel de le mettre * après * le '@echo off'). La seule façon d'invoquer 'delayedexpansion' (dont vous avez besoin parce que vous modifiez' count' dans un bloc de code et d'utiliser la valeur modifiée) est d'utiliser 'setlocal'. En outre, l'utilisation de 'setlocal' garantit que l'environnement reste propre et n'est pas encombré par les modifications apportées à l'environnement en exécutant des lots. Si elle est omise, les modifications apportées persistent, vous pouvez donc "hériter" d'une variable définie par un lot complètement indépendant. – Magoo