2017-06-22 25 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