Hazx小屋 Hazx小屋

使用批处理在系统内进行多系统切换

in PC 相关 阅读: 1281 文章转载请注明来源!

  关于多系统切换,在进入系统前就能用键盘选择并切换,再写一个批处理来解决这个问题你可能觉得我是多此一举。其实这个批处理解决方案源于我的实习工作,适用于服务器环境,也就是你需要多系统,但你只能远程桌面连接服务器,不能跑到机房给服务器插个键盘显示器来切换系统,这个批处理就能解决这个问题。(虽然在系统高级设置里可以选择默认系统然后重启,但相比较,批处理更方便一些。)

  脚本语言:Batch 批处理(.bat)
  适用系统:PC系统Windows Vista及以后的版本、服务器系统Windows Server 2008及以后的版本。
  脚本内容如下:

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
    echo 请求管理员权限...
    goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    exit /B
:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
cls
bcdedit /default {d9fad1d5-a16d-11e6-84a0-f06a95fa7099}
shutdown -r -t 0

解释:
  cls之前的内容是用来提权的,因为之后的bcdedit需要管理员权限。用了这段内容可以免去右键再以管理员权限运行,直接双击批处理即可。
  bcdedit是专门由于修改NT6.x+系列操作系统引导菜单的工具。在以管理员权限打开的CMD下执行bcdedit /?可以看到详细的帮助信息。这里的/default参数是设定默认引导项目。后面跟着的{xxxx}是硬盘分区标识符,不同硬盘不同分区的标识符都不同,需要自己查看自己分区的信息确定。在以管理员权限打开的CMD下直接执行bcdedit即可看到“标识符”。(只能看到非当前系统所在分区的标识符)
  shutdown是关机/重启/注销指令,-r为重启参数,-t为时间参数(-t 0即为立即执行)。

提供另外一个才写的全自动脚本

@echo off
setlocal enabledelayedexpansion
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
    echo 请求管理员权限...
    goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    exit /B
:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
cls
del /q %temp%\bcdlist.txt
bcdedit > %temp%\bcdlist.txt
set "strID="
for /f "tokens=1,2* delims=: " %%i in ('findstr /n /r "Win.*7" %temp%\bcdlist.txt') do (
    set /a "desLine=%%i"
    echo,&echo,
    set /a "desLine-=4"
    if !desLine! LSS 0 set /a "desLine=0"
    for /f "tokens=1,*" %%a in ('more +!desLine! %temp%\bcdlist.txt^|findstr /i /r "标识符"') do (
        set "strID=%%b"
        goto :next
    )
)
:next
bcdedit /default !strID!
bcdedit /timeout 3
shutdown -r -t 0

  把本脚本中的Win.*7改成其他的如Win.*10,它会自动判断并读出标识符,无需手动去查系统标识符,只需要改一改脚本中的系统粗略描述即可。

WeChat Pay

微信打赏

Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

windows多系统切换批处理
最后由Hazx修改于2017-11-10 12:54
发表新评论
博客系统已萌萌哒运行了
© 2020 Hazx. Theme by Jrotty.
前篇 后篇
雷姆
拉姆