Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :: CREATED BY SlyFox1186
- :: https://pastebin.com/u/slyfox1186
- :: https://stackoverflow.com/users/10572786/slyfox11867
- :: SCRIPT FIXES THE NEED FOR MULTIPLE SUPPORTING FILES TO WORK
- :: PROMPTS THE USER TO CHOOSE WHICH BOOT OPTION THEY DESIRE
- :: SAVE THIS SCRIPT WITH A .BAT EXT [NOT] WITH A .CMD EXT DUE TO HOW >>
- :: >> EACH PROCESSES THE CHOICE COMMAND'S %ERRORLEVEL%
- :: CHOOSE FROM THE FOLLOWING OPTIONS
- :: [SAFE MODE]
- :: [SAFE MODE WITH NETWORKING]
- :: [SAFE MODE WITH COMMAND PROMPT]
- :: [EXIT SAFE MODE]
- :: [EXIT SCRIPT]
- :: SCRIPT WILL CREATE TEMPORARY SUPPORTING VBS SCRIPTS AND DELETE THEM WHEN DONE
- :: THERE IS A CMD.EXE BUG THAT CAN PREVENT BATCH SCRIPTS RUNNING CORRECTLY ON >>
- :: >> USER DESKTOP FOLDER %ONEDRIVE%\DESKTOP
- :: IF YOU EXPERIENCE THIS RUN THE SCRIPT LITERALLY ANYWHERE ELSE.
- :: YOU CAN MODIFY HOW LONG WINDOWS WAITS BEFORE REBOOTING BY CHAINGING >>
- :: >> THE "SET winDelay=15" VARIABLE. DO NOT USE A VALUE LESS THAN 15 >>
- :: >> OR THIS SCRIPT COULD FAIL TO FUNCTION AS INTENDED
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :: SCRIPT VERSION 2.0 ::
- :: REMOVED MOST OF THE SUBROUTINE SECTION ::
- :: ELIMINATED THE NEED FOR MULTIPLE SETLOCAL INSTANCES ::
- :: IMPROVED SCRIPT RELIABILITY ::
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :: BEGIN SCRIPT
- :: CODE TO RUN SCRIPT AS AN ADMINISTRATOR WITHOUT HAVING TO USE THE CONTEXT MENU OPTION
- :-------------------------------------
- @ECHO OFF
- IF NOT "%1"=="am_admin" (POWERSHELL START -verb RunAs '%0' am_admin & EXIT /B)
- :-------------------------------------
- SETLOCAL ENABLEDELAYEDEXPANSION
- PROMPT $G
- COLOR 0A
- TITLE ENTER OR EXIT SAFE MODE
- PUSHD "%~dp0"
- ECHO.
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
- ECHO :: ::
- ECHO :: ::
- ECHO :: ::
- ECHO :: Enter Or Exit Safe Mode ::
- ECHO :: ::
- ECHO :: Please save ALL open work before continuing ::
- ECHO :: ::
- ECHO :: ::
- ECHO :: ::
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
- ECHO.
- PAUSE
- GOTO FirstChoice
- :: BEGIN SCRIPT RESTART
- :: KILL ANY LEFTOVER PROCESSES STILL RUNNING FROM PRIOR RUN TO IMPROVE SCRIPT STABILITY
- :restart
- TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
- IF ERRORLEVEL 1 GOTO hungProcess
- TASKKILL /F /IM wlrmdr.exe /T >NUL
- :hungProcess
- TASKLIST /FI "IMAGENAME EQ wscript.exe" 2> NUL | FIND /I /N "wscript.exe" >NUL
- IF ERRORLEVEL 1 GOTO FirstChoice
- TASKKILL /F /IM wscript.exe /T >NUL
- :: PROMPT USER CHOICES
- :firstCHOICE
- :: CHANGE THIS VARIABLE TO SET HOW LONG WINDOWS WAITS BEFORE IT REBOOTS
- SET winDelay=15
- CLS && ECHO.
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
- ECHO :: ::
- ECHO :: Select a boot mode: ::
- ECHO :: ::
- ECHO :: [1] Safe Mode ::
- ECHO :: [2] Safe Mode with Networking ::
- ECHO :: [3] Safe Mode with Command Prompt ::
- ECHO :: [4] Exit Safe Mode ::
- ECHO :: [5] Exit Script ::
- ECHO :: ::
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
- ECHO.
- CHOICE /C 12345 /N
- :: CHOICE COMMAND: EXIT SCRIPT
- IF ERRORLEVEL 5 GOTO :EOF
- :: CHOICE COMMAND: EXIT SAFE MODE
- IF NOT ERRORLEVEL 4 GOTO TryCMD
- (
- ECHO IF WScript.Arguments.length = 0 Then
- ECHO Set oShell = CreateObject^("Shell.Application"^)
- ECHO oShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
- ECHO Else
- ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
- ECHO oShell2.Run "bcdedit /Deletevalue {current} safeboot",0,True
- ECHO oShell2.Run "bcdedit /Deletevalue {current} safebootalternateshell",0,True
- ECHO oShell2.Run "shutdown -r -t %winDelay% -f", 0, True
- ECHO End IF
- ECHO Set oShell = Nothing
- ECHO Set oShell2 = Nothing
- ) > %TMP%\safeEXIT.vbs && wscript %TMP%\safeEXIT.vbs
- :rescanExit
- TIMEOUT 1 /NOBREAK >NUL
- TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
- IF ERRORLEVEL 1 GOTO rescanExit
- TASKKILL /F /IM wlrmdr.exe && DEL /Q %TMP%\safeEXIT.vbs
- SET echoEXIT=Exit Safe Mode
- CALL :confirmCHOICE "%echoEXIT%"
- GOTO :EOF
- :: CHOICE COMMAND: SAFE MODE WITH COMMAND PROMPT
- :TryCMD
- IF NOT ERRORLEVEL 3 GOTO TryNET
- (
- ECHO IF WScript.Arguments.length = 0 Then
- ECHO Set oShell = CreateObject^("Shell.Application"^)
- ECHO oShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
- ECHO Else
- ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
- ECHO oShell2.Run "bcdedit /set {current} safeboot minimal",0,True
- ECHO oShell2.Run "bcdedit /set {current} safebootalternateshell yes",0,True
- ECHO oShell2.Run "shutdown -r -t %winDelay% -f", 0, True
- ECHO End IF
- ECHO Set oShell = Nothing
- ECHO Set oShell2 = Nothing
- ) > %TMP%\safeCMD.vbs && wscript %TMP%\safeCMD.vbs
- :rescanCMD
- TIMEOUT 1 /NOBREAK >NUL
- TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
- IF ERRORLEVEL 1 GOTO rescanCMD
- TASKKILL /F /IM wlrmdr.exe && DEL /Q %TMP%\safeCMD.vbs
- SET echoCMD=Safe Mode with Command Prompt
- CALL :confirmCHOICE "%echoCMD%"
- GOTO :EOF
- :: CHOICE COMMAND: SAFE MODE WITH NETWORKING
- :TryNET
- IF NOT ERRORLEVEL 2 GOTO TrySAFE
- (
- ECHO IF WScript.Arguments.length = 0 Then
- ECHO Set oShell = CreateObject^("Shell.Application"^)
- ECHO oShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
- ECHO Else
- ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
- ECHO oShell2.Run "bcdedit /set {current} safeboot network",0,True
- ECHO oShell2.Run "shutdown -r -t %winDelay% -f", 0, True
- ECHO End IF
- ECHO Set oShell = Nothing
- ECHO Set oShell2 = Nothing
- ) > %TMP%\safeNET.vbs && wscript %TMP%\safeNET.vbs
- :rescanNET
- TIMEOUT 1 /NOBREAK >NUL
- TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
- IF ERRORLEVEL 1 GOTO rescanNET
- TASKKILL /F /IM wlrmdr.exe /T && DEL /Q %TMP%\safeNET.vbs
- SET echoNET=Safe Mode with Networking
- CALL :confirmCHOICE "%echoNET%"
- GOTO :EOF
- :: CHOICE COMMAND: SAFE MODE
- :TrySAFE
- IF NOT ERRORLEVEL 1 GOTO :EOF
- (
- ECHO IF WScript.Arguments.length = 0 Then
- ECHO Set oShell = CreateObject^("Shell.Application"^)
- ECHO oShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
- ECHO Else
- ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
- ECHO oShell2.Run "bcdedit /set {current} safeboot minimal",0,True
- ECHO oShell2.Run "shutdown -r -t %winDelay% -f", 0, True
- ECHO End IF
- ECHO Set oShell = Nothing
- ECHO Set oShell2 = Nothing
- ) > %TMP%\safeMODE.vbs && wscript %TMP%\safeMODE.vbs
- :rescanSAFE
- TIMEOUT 1 /NOBREAK >NUL
- TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
- IF ERRORLEVEL 1 GOTO rescanSAFE
- TASKKILL /F /IM wlrmdr.exe && DEL /Q %TMP%\safeMODE.vbs
- SET echoSAFE=Safe Mode
- CALL :confirmCHOICE "%echoSAFE%"
- GOTO :EOF
- :: SUBROUTINE: CONFIRM CHOICE
- :confirmCHOICE
- CLS && ECHO.
- ECHO You have chosen: %~1
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
- ECHO :: ::
- ECHO :: PC restart was initiated ::
- ECHO :: Make a decision... ::
- ECHO :: ::
- ECHO :: [1] Continue shutdown ::
- ECHO :: [2] Start over ::
- ECHO :: [3] Abort shutdown and exit ::
- ECHO :: ::
- ECHO :: ::
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
- CHOICE /C 123 /T 10 /D 2 /N
- CLS && ECHO.
- IF ERRORLEVEL 3 SHUTDOWN /A && GOTO :EOF
- IF ERRORLEVEL 2 SHUTDOWN /A && ENDLOCAL && GOTO restart
- IF ERRORLEVEL 1 (
- ECHO You have chosen: %~1
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
- ECHO :: ::
- ECHO :: ::
- ECHO :: ::
- ECHO :: ::
- ECHO :: Your PC will restart as instructed ::
- ECHO :: ::
- ECHO :: ::
- ECHO :: ::
- ECHO :: ::
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
- ECHO.
- PAUSE && GOTO :EOF
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement