Advertisement
slyfox1186

enter-or-exit-safe-mode.bat

Dec 12th, 2020 (edited)
1,475
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 8.81 KB | None | 0 0
  1. @ECHO OFF
  2. SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
  3. COLOR 0A
  4. TITLE ENTER OR EXIT WINDOWS SAFE MODE
  5.  
  6. :------------------------------------------------------------------------------------------------
  7.  
  8. REM Created By: SlyFox1186
  9. REM https://pastebin.com/u/slyfox1186
  10.  
  11. :------------------------------------------------------------------------------------------------
  12.  
  13. REM THIS SCRIPT ELIMINATES THE NEED FOR MULTIPLE
  14. REM SUPPORTING FILES TO ENTER OR EXIT WINDOWS SAFE MODE
  15.  
  16. REM CHOOSE FROM THE FOLLOWING BOOT OPTIONS:
  17. REM [SAFE MODE MINIMAL]
  18. REM [SAFE MODE WITH NETWORKING]
  19. REM [SAFE MODE WITH COMMAND PROMPT]
  20. REM [EXIT SAFE MODE]
  21.  
  22. REM INSTRUCTIONS:
  23. REM SAVE THE SCRIPT WITH A ".bat" EXTENSION
  24. REM DO NOT USE ".cmd" OR THE CHOICE COMMAND WILL FAIL
  25. REM TO PROCESS THE USER'S INPUT IN THE CORRECT NUMERICAL ORDER
  26.  
  27. REM UPDATES:
  28. REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  29. REM ::                                                     ::
  30. REM :: v4.0                                                ::
  31. REM :: ADDED TIMEOUT VARIABLE                              ::
  32. REM :: REMOVED SEVERAL UNNECESSARY VARIABLES               ::
  33. REM :: ADDED SPACERS FOR EASIER VIEWING                    ::
  34. REM :: CHANGED CHOICE COMMAND FORMATTING AT BOTTOM         ::
  35. REM ::                                                     ::
  36. REM :: v3.0                                                ::
  37. REM :: OPTIMIZED SCRIPT FLOW                               ::
  38. REM :: REMOVED UNNECESSARY PARTS                           ::
  39. REM ::                                                     ::
  40. REM :: v2.0                                                ::
  41. REM :: REMOVED MOST OF THE SUBROUTINE SECTION              ::
  42. REM :: ELIMINATED THE NEED FOR MULTIPLE SETLOCAL INSTANCES ::
  43. REM ::                                                     ::
  44. REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  45.  
  46. REM START SCRIPT
  47.  
  48. :-------------------------------------------------------------
  49.  
  50. REM MAXIMIZE CMD WINDOW
  51. IF NOT "%1"=="MAX" START /MAX CMD /D /C %0 MAX & GOTO :EOF
  52.  
  53. :-----------------------------------------------------------------
  54.  
  55. REM CHANGE THE "SEC" VAR BELOW TO CHANGE HOW LONG WINDOWS WAITS BEFORE REBOOTING.
  56. REM DO NOT SET A VALUE LOWER THAN "8" OR THE SCRIPT COULD FAIL TO PERFORM AS INTENDED!
  57. SET SEC=8
  58.  
  59. :-----------------------------------------------------------------
  60.  
  61. REM ECHO RECOMMENDATIONS FOR USER
  62. CLS & ECHO=
  63. ECHO   :::::::::::::::::::::::::::::::::::::::::::::::::::
  64. ECHO   ::                                               ::
  65. ECHO   ::        Enter or Exit Windows Safe Mode        ::
  66. ECHO   ::                                               ::
  67. ECHO   ::           Please Save All Open Work           ::
  68. ECHO   ::                                               ::
  69. ECHO   ::           Press [Enter] To Continue           ::
  70. ECHO   ::                                               ::
  71. ECHO   :::::::::::::::::::::::::::::::::::::::::::::::::::
  72. ECHO=
  73. SET /P=Press [Enter] to Continue >NUL
  74. GOTO FirstChoice
  75.  
  76. :-----------------------------------------------------------------
  77.  
  78. REM AFTER A SCRIPT RESTART, KILL ANY LEFTOVER PROCESSES
  79. :StartOver
  80. TASKLIST | FIND "wlrmdr.exe" >NUL
  81.     IF ERRORLEVEL 1 GOTO HungProcess
  82.         TASKKILL /F /IM "wlrmdr.exe" /T
  83.         GOTO FirstChoice
  84. :HungProcess
  85. TASKLIST | FIND "wscript.exe" >NUL
  86.     IF ERRORLEVEL 1 GOTO FirstChoice
  87.         TASKKILL /F /IM "wscript.exe" /T
  88.  
  89. :-----------------------------------------------------------------
  90.  
  91. REM PROMPT USER CHOICES
  92. :FirstChoice
  93. CLS & ECHO=
  94. ECHO   :::::::::::::::::::::::::::::::::::::::::::::::::::
  95. ECHO   ::                                               ::
  96. ECHO   ::  Choose A Boot Mode:                          ::
  97. ECHO   ::                                               ::
  98. ECHO   ::  [1] Safe Mode Minimal                        ::
  99. ECHO   ::  [2] Safe Mode with Networking                ::
  100. ECHO   ::  [3] Safe Mode with Command Prompt            ::
  101. ECHO   ::  [4] Exit Safe Mode                           ::
  102. ECHO   ::                                               ::
  103. ECHO   :::::::::::::::::::::::::::::::::::::::::::::::::::
  104. ECHO=
  105. CHOICE /C 1234 /N & CLS & ECHO=
  106.  
  107. :-----------------------------------------------------------------
  108.  
  109. REM EXIT SAFE MODE
  110. IF NOT ERRORLEVEL 4 GOTO TryCmd
  111. (
  112. ECHO If WScript.Arguments.length = 0 Then
  113. ECHO Set oShell = CreateObject^("Shell.Application"^)
  114. ECHO    oShell.ShellExecute "wscript.exe", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
  115. ECHO Else
  116. ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
  117. ECHO    oShell2.Run "bcdedit /deletevalue {current} safeboot",0,True
  118. ECHO    oShell2.Run "bcdedit /deletevalue {current} safebootalternateshell",0,True
  119. ECHO    oShell2.Run "shutdown -r -t %SEC% -f", 0, True
  120. ECHO End If
  121. ECHO Set oShell = Nothing
  122. ECHO Set oShell2 = Nothing
  123. )>"%TMP%\safeExit.vbs"
  124.     CALL :ConfirmChoice "Exit Safe Mode" "%TMP%\safeExit.vbs"
  125.     GOTO :EOF
  126.  
  127. :-----------------------------------------------------------------
  128.  
  129. REM ENTER SAFE MODE WITH COMMAND PROMPT
  130. :TryCmd
  131. IF NOT ERRORLEVEL 3 GOTO TryNet
  132. (
  133. ECHO If WScript.Arguments.length = 0 Then
  134. ECHO Set oShell = CreateObject^("Shell.Application"^)
  135. ECHO    oShell.ShellExecute "wscript.exe", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
  136. ECHO Else
  137. ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
  138. ECHO    oShell2.Run "bcdedit /set {current} safeboot minimal",0,True
  139. ECHO    oShell2.Run "bcdedit /set {current} safebootalternateshell yes",0,True
  140. ECHO    oShell2.Run "shutdown -r -t %SEC% -f", 0, True
  141. ECHO End If
  142. ECHO Set oShell = Nothing
  143. ECHO Set oShell2 = Nothing
  144. )>"%TMP%\safeCmd.vbs"
  145.     CALL :ConfirmChoice "Safe Mode with Command Prompt" "%TMP%\safeCmd.vbs"
  146.     GOTO :EOF
  147.  
  148. :-----------------------------------------------------------------
  149.  
  150. REM ENTER SAFE MODE WITH NETWORKING
  151. :TryNet
  152. IF NOT ERRORLEVEL 2 GOTO TrySafe
  153. (
  154. ECHO If WScript.Arguments.length = 0 Then
  155. ECHO Set oShell = CreateObject^("Shell.Application"^)
  156. ECHO    oShell.ShellExecute "wscript.exe", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
  157. ECHO Else
  158. ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
  159. ECHO    oShell2.Run "bcdedit /set {current} safeboot network",0,True
  160. ECHO    oShell2.Run "shutdown -r -t %SEC% -f", 0, True
  161. ECHO End If
  162. ECHO Set oShell = Nothing
  163. ECHO Set oShell2 = Nothing
  164. )>"%TMP%\safeNet.vbs"
  165.     CALL :ConfirmChoice "Safe Mode with Networking" "%TMP%\safeNet.vbs"
  166.     GOTO :EOF
  167.  
  168. :-----------------------------------------------------------------
  169.  
  170. REM ENTER SAFE MODE MINIMAL
  171. :TrySafe
  172. IF NOT ERRORLEVEL 1 GOTO :EOF
  173. (
  174. ECHO If WScript.Arguments.length = 0 Then
  175. ECHO Set oShell = CreateObject^("Shell.Application"^)
  176. ECHO    oShell.ShellExecute "wscript.exe", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
  177. ECHO Else
  178. ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
  179. ECHO    oShell2.Run "bcdedit /set {current} safeboot minimal",0,True
  180. ECHO    oShell2.Run "shutdown -r -t %SEC% -f", 0, True
  181. ECHO End If
  182. ECHO Set oShell = Nothing
  183. ECHO Set oShell2 = Nothing
  184. )>"%TMP%\safeMode.vbs"
  185.     CALL :ConfirmChoice "Safe Mode Minimal" "%TMP%\safeMode.vbs"
  186.     GOTO :EOF
  187.  
  188. :-----------------------------------------------------------------
  189.  
  190. REM BEGIN SUBROUTINE
  191. :ConfirmChoice
  192. CLS & ECHO=
  193. ECHO   You Chose: [ %~1 ]
  194. ECHO=
  195. ECHO   :::::::::::::::::::::::::::::::::::::::::::::::::::
  196. ECHO   ::                                               ::
  197. ECHO   ::  Confirm Choice:                              ::
  198. ECHO   ::                                               ::
  199. ECHO   ::  [1] Restart PC                               ::
  200. ECHO   ::  [2] Restart Script                           ::
  201. ECHO   ::  [3] Exit Script                              ::
  202. ECHO   ::                                               ::
  203. ECHO   :::::::::::::::::::::::::::::::::::::::::::::::::::
  204. ECHO=
  205. CHOICE /C 123 /N & CLS & ECHO=
  206.  
  207. :-----------------------------------------------------------------
  208.  
  209. REM EXIT SCRIPT
  210. IF ERRORLEVEL 3 (
  211.     DEL /F /Q "%~2"
  212.     GOTO :EOF
  213. )
  214.  
  215. REM RESTART SCRIPT
  216. IF ERRORLEVEL 2 (
  217.     DEL /F /Q "%~2"
  218.     ENDLOCAL
  219.     GOTO StartOver
  220. )
  221.  
  222. REM PROCEED WITH PC RESTART
  223. IF ERRORLEVEL 1 (
  224.     C:\Windows\System32\wscript.exe //NoLogo "%~2"
  225.     :Rescan
  226.     TIMEOUT 1 /NOBREAK >NUL
  227.     TASKLIST | FIND "wlrmdr.exe" >NUL
  228.         IF ERRORLEVEL 1 GOTO Rescan
  229.             TASKKILL /F /IM "wlrmdr.exe" /T >NUL 2>&1
  230.                 CLS & ECHO=
  231.                 ECHO   :::::::::::::::::::::::::::::::::::::::::::::::::::
  232.                 ECHO   ::                                               ::
  233.                 ECHO   ::           Your PC Will Restart Soon           ::
  234.                 ECHO   ::                                               ::
  235.                 ECHO   ::                 Closing CMD..                 ::
  236.                 ECHO   ::                                               ::
  237.                 ECHO   :::::::::::::::::::::::::::::::::::::::::::::::::::
  238.                 ECHO=
  239.                 TIMEOUT 4
  240.                 DEL /F /Q "%~2"
  241.                 GOTO :EOF
  242. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement