BAT小白。想弄个交互式更改计算机名的批处理,当判断到计算机名的字符串大于15个字符时跳转到脚本开头重新要求用户数据计算机名,直到符合要求后执行后面的更改注册表操作。脚本如下所示,但现在无论是否大于15个字符只要按回车都会继续执行后面的脚本,还请大神们帮忙看下问题出在哪里。- :gethostname
- cls
- title 初始化:更改计算机名
- set /p "cmpy=请键入设备所属的公司名(限制5个字符):"
- set /p "usag=请键入设备的用途(限制5个字符):"
- set "srvnm=adv-%cmpy%-%usag%"
- set /p "=该设备将被重命名为:%srvnm%,请确保其不多于15个字符。" <nul & echo,
- call:GetStrLen %srvnm%
- if %n% gtr 15 goto gethostname
-
- echo 正在更新注册表。
- reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ActiveComputerName" /v ComputerName /t reg_sz /d %name% /f >nul 2>nul
- reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t reg_sz /d %name% /f >nul 2>nul
- reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters" /v Hostname /t reg_sz /d %name% /f >nul 2>nul
- echo 注册表更新完成。
- goto:eof
- ::获取字符串长度
- :GetStrLen
- setlocal enabledelayedexpansion
- set /a max=8190,min=0
- for /l %%a in (1,1,14) do (
- set /a "num=(max+min)/2"
- for /f "delims=" %%b in ("!num!") do (
- if "!str:~%%b!" equ "" (set /a max=num) else set /a min=num
- )
- )
- if "!str:~%num%!" neq "" set /a num+=1
- endlocal & set "%1=%num%"
- pause>nul
复制代码
|