Advertisement
slyfox1186

enter-or-exit-safe-mode-without-additional-files.bat

Apr 26th, 2020 (edited)
960
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 8.94 KB | None | 0 0
  1. :: CREATED BY SlyFox1186
  2. :: https://pastebin.com/u/slyfox1186
  3. :: https://stackoverflow.com/users/10572786/slyfox11867
  4.  
  5. :: SCRIPT FIXES THE NEED FOR MULTIPLE SUPPORTING FILES TO WORK
  6. :: PROMPTS THE USER TO CHOOSE WHICH BOOT OPTION THEY DESIRE
  7. :: SAVE THIS SCRIPT WITH A .BAT EXT [NOT] WITH A .CMD EXT DUE TO HOW >>
  8. :: >> EACH PROCESSES THE CHOICE COMMAND'S %ERRORLEVEL%
  9.  
  10. :: CHOOSE FROM THE FOLLOWING OPTIONS
  11. :: [SAFE MODE]
  12. :: [SAFE MODE WITH NETWORKING]
  13. :: [SAFE MODE WITH COMMAND PROMPT]
  14. :: [EXIT SAFE MODE]
  15. :: [EXIT SCRIPT]
  16.  
  17. :: SCRIPT WILL CREATE TEMPORARY SUPPORTING VBS SCRIPTS AND DELETE THEM WHEN DONE
  18.  
  19. :: THERE IS A CMD.EXE BUG THAT CAN PREVENT BATCH SCRIPTS RUNNING CORRECTLY ON >>
  20. :: >> USER DESKTOP FOLDER %ONEDRIVE%\DESKTOP
  21. :: IF YOU EXPERIENCE THIS RUN THE SCRIPT LITERALLY ANYWHERE ELSE.
  22.  
  23. :: YOU CAN MODIFY HOW LONG WINDOWS WAITS BEFORE REBOOTING BY CHAINGING >>
  24. :: >> THE "SET winDelay=15" VARIABLE. DO NOT USE A VALUE LESS THAN 15 >>
  25. :: >> OR THIS SCRIPT COULD FAIL TO FUNCTION AS INTENDED
  26.  
  27. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  28. :: SCRIPT VERSION 2.0                                  ::
  29. :: REMOVED MOST OF THE SUBROUTINE SECTION              ::
  30. :: ELIMINATED THE NEED FOR MULTIPLE SETLOCAL INSTANCES ::
  31. :: IMPROVED SCRIPT RELIABILITY                         ::
  32. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  33.  
  34. :: BEGIN SCRIPT
  35.  
  36. :: CODE TO RUN SCRIPT AS AN ADMINISTRATOR WITHOUT HAVING TO USE THE CONTEXT MENU OPTION
  37. :-------------------------------------
  38. @ECHO OFF
  39. IF NOT "%1"=="am_admin" (POWERSHELL START -verb RunAs '%0' am_admin & EXIT /B)
  40. :-------------------------------------
  41. SETLOCAL ENABLEDELAYEDEXPANSION
  42. PROMPT $G
  43. COLOR 0A
  44. TITLE ENTER OR EXIT SAFE MODE
  45.  
  46. PUSHD "%~dp0"
  47.  
  48. ECHO.
  49. ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
  50. ECHO ::                                               ::
  51. ECHO ::                                               ::
  52. ECHO ::                                               ::
  53. ECHO ::            Enter Or Exit Safe Mode            ::
  54. ECHO ::                                               ::
  55. ECHO ::  Please save ALL open work before continuing  ::
  56. ECHO ::                                               ::
  57. ECHO ::                                               ::
  58. ECHO ::                                               ::
  59. ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
  60. ECHO.
  61. PAUSE
  62. GOTO FirstChoice
  63.  
  64. :: BEGIN SCRIPT RESTART
  65. :: KILL ANY LEFTOVER PROCESSES STILL RUNNING FROM PRIOR RUN TO IMPROVE SCRIPT STABILITY
  66. :restart
  67. TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
  68.   IF ERRORLEVEL 1 GOTO hungProcess
  69.     TASKKILL /F /IM wlrmdr.exe /T >NUL
  70. :hungProcess
  71. TASKLIST /FI "IMAGENAME EQ wscript.exe" 2> NUL | FIND /I /N "wscript.exe" >NUL
  72.   IF ERRORLEVEL 1 GOTO FirstChoice
  73.     TASKKILL /F /IM wscript.exe /T >NUL
  74.  
  75. :: PROMPT USER CHOICES
  76. :firstCHOICE
  77.  
  78. :: CHANGE THIS VARIABLE TO SET HOW LONG WINDOWS WAITS BEFORE IT REBOOTS
  79. SET winDelay=15
  80.  
  81. CLS && ECHO.
  82. ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
  83. ECHO ::                                               ::
  84. ECHO ::  Select a boot mode:                          ::
  85. ECHO ::                                               ::
  86. ECHO ::  [1] Safe Mode                                ::
  87. ECHO ::  [2] Safe Mode with Networking                ::
  88. ECHO ::  [3] Safe Mode with Command Prompt            ::
  89. ECHO ::  [4] Exit Safe Mode                           ::
  90. ECHO ::  [5] Exit Script                              ::
  91. ECHO ::                                               ::
  92. ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
  93. ECHO.
  94.  
  95. CHOICE /C 12345 /N
  96.  
  97. :: CHOICE COMMAND: EXIT SCRIPT
  98. IF ERRORLEVEL 5 GOTO :EOF
  99.  
  100. :: CHOICE COMMAND: EXIT SAFE MODE
  101. IF NOT ERRORLEVEL 4 GOTO TryCMD
  102. (
  103. ECHO IF WScript.Arguments.length = 0 Then
  104. ECHO Set oShell = CreateObject^("Shell.Application"^)
  105. ECHO oShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
  106. ECHO Else
  107. ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
  108. ECHO oShell2.Run "bcdedit /Deletevalue {current} safeboot",0,True
  109. ECHO oShell2.Run "bcdedit /Deletevalue {current} safebootalternateshell",0,True
  110. ECHO oShell2.Run "shutdown -r -t %winDelay% -f", 0, True
  111. ECHO End IF
  112. ECHO Set oShell = Nothing
  113. ECHO Set oShell2 = Nothing
  114. ) > %TMP%\safeEXIT.vbs && wscript %TMP%\safeEXIT.vbs
  115. :rescanExit
  116.   TIMEOUT 1 /NOBREAK >NUL
  117.   TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
  118.   IF ERRORLEVEL 1 GOTO rescanExit
  119.     TASKKILL /F /IM wlrmdr.exe && DEL /Q %TMP%\safeEXIT.vbs
  120.   SET echoEXIT=Exit Safe Mode
  121.   CALL :confirmCHOICE "%echoEXIT%"
  122.   GOTO :EOF
  123.  
  124. :: CHOICE COMMAND: SAFE MODE WITH COMMAND PROMPT
  125. :TryCMD
  126. IF NOT ERRORLEVEL 3 GOTO TryNET
  127. (
  128. ECHO IF WScript.Arguments.length = 0 Then
  129. ECHO Set oShell = CreateObject^("Shell.Application"^)
  130. ECHO oShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
  131. ECHO Else
  132. ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
  133. ECHO oShell2.Run "bcdedit /set {current} safeboot minimal",0,True
  134. ECHO oShell2.Run "bcdedit /set {current} safebootalternateshell yes",0,True
  135. ECHO oShell2.Run "shutdown -r -t %winDelay% -f", 0, True
  136. ECHO End IF
  137. ECHO Set oShell = Nothing
  138. ECHO Set oShell2 = Nothing
  139. ) > %TMP%\safeCMD.vbs && wscript %TMP%\safeCMD.vbs
  140. :rescanCMD
  141.   TIMEOUT 1 /NOBREAK >NUL
  142.   TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
  143.   IF ERRORLEVEL 1 GOTO rescanCMD
  144.     TASKKILL /F /IM wlrmdr.exe && DEL /Q %TMP%\safeCMD.vbs
  145.   SET echoCMD=Safe Mode with Command Prompt
  146.   CALL :confirmCHOICE "%echoCMD%"
  147.   GOTO :EOF
  148.  
  149. :: CHOICE COMMAND: SAFE MODE WITH NETWORKING
  150. :TryNET
  151. IF NOT ERRORLEVEL 2 GOTO TrySAFE
  152. (
  153. ECHO IF WScript.Arguments.length = 0 Then
  154. ECHO Set oShell = CreateObject^("Shell.Application"^)
  155. ECHO oShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
  156. ECHO Else
  157. ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
  158. ECHO oShell2.Run "bcdedit /set {current} safeboot network",0,True
  159. ECHO oShell2.Run "shutdown -r -t %winDelay% -f", 0, True
  160. ECHO End IF
  161. ECHO Set oShell = Nothing
  162. ECHO Set oShell2 = Nothing
  163. ) > %TMP%\safeNET.vbs && wscript %TMP%\safeNET.vbs
  164. :rescanNET
  165.   TIMEOUT 1 /NOBREAK >NUL
  166.   TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
  167.   IF ERRORLEVEL 1 GOTO rescanNET
  168.     TASKKILL /F /IM wlrmdr.exe /T && DEL /Q %TMP%\safeNET.vbs
  169.   SET echoNET=Safe Mode with Networking
  170.   CALL :confirmCHOICE "%echoNET%"
  171.   GOTO :EOF
  172.  
  173. :: CHOICE COMMAND: SAFE MODE
  174. :TrySAFE
  175. IF NOT ERRORLEVEL 1 GOTO :EOF
  176. (
  177. ECHO IF WScript.Arguments.length = 0 Then
  178. ECHO Set oShell = CreateObject^("Shell.Application"^)
  179. ECHO oShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
  180. ECHO Else
  181. ECHO Set oShell2 = WScript.CreateObject^("WScript.Shell"^)
  182. ECHO oShell2.Run "bcdedit /set {current} safeboot minimal",0,True
  183. ECHO oShell2.Run "shutdown -r -t %winDelay% -f", 0, True
  184. ECHO End IF
  185. ECHO Set oShell = Nothing
  186. ECHO Set oShell2 = Nothing
  187. ) > %TMP%\safeMODE.vbs && wscript %TMP%\safeMODE.vbs
  188. :rescanSAFE
  189.   TIMEOUT 1 /NOBREAK >NUL
  190.   TASKLIST /FI "IMAGENAME EQ wlrmdr.exe" 2> NUL | FIND /I /N "wlrmdr.exe" >NUL
  191.   IF ERRORLEVEL 1 GOTO rescanSAFE
  192.     TASKKILL /F /IM wlrmdr.exe && DEL /Q %TMP%\safeMODE.vbs
  193.   SET echoSAFE=Safe Mode
  194.   CALL :confirmCHOICE "%echoSAFE%"
  195.   GOTO :EOF
  196.  
  197. :: SUBROUTINE: CONFIRM CHOICE
  198. :confirmCHOICE
  199. CLS && ECHO.
  200. ECHO  You have chosen: %~1
  201. ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
  202. ECHO ::                                               ::
  203. ECHO ::  PC restart was initiated                     ::
  204. ECHO ::  Make a decision...                           ::
  205. ECHO ::                                               ::
  206. ECHO ::  [1] Continue shutdown                        ::
  207. ECHO ::  [2] Start over                               ::
  208. ECHO ::  [3] Abort shutdown and exit                  ::
  209. ECHO ::                                               ::
  210. ECHO ::                                               ::
  211. ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
  212.  
  213. CHOICE /C 123 /T 10 /D 2 /N
  214.  
  215. CLS && ECHO.
  216. IF ERRORLEVEL 3 SHUTDOWN /A && GOTO :EOF
  217. IF ERRORLEVEL 2 SHUTDOWN /A && ENDLOCAL && GOTO restart
  218. IF ERRORLEVEL 1 (
  219. ECHO  You have chosen: %~1
  220. ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
  221. ECHO ::                                               ::
  222. ECHO ::                                               ::
  223. ECHO ::                                               ::
  224. ECHO ::                                               ::
  225. ECHO ::  Your PC will restart as instructed           ::
  226. ECHO ::                                               ::
  227. ECHO ::                                               ::
  228. ECHO ::                                               ::
  229. ECHO ::                                               ::
  230. ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::
  231. ECHO.
  232. PAUSE && GOTO :EOF
  233. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement