ОБНОВЛЕНИЕ:
В соответствии с комментариями пользователя Mofi я переработал свой дизайн сценария. Я все еще не могу запустить этот скрипт на своем рабочем столе, как указано в моем исходном вопросе, но я работаю над выявлением проблемы с помощью Process Explorer, как он упоминал.
Ниже приведен обновленный скрипт. Если кому-то есть что предложить, дайте мне знать. Спасибо!
:: SCRIPT VERSION 2.0
:: REMOVED MOST OF THE SUBROUTINE SECTION
:: ELIMINATED THE NEED FOR MULTIPLE SETLOCAL INSTANCES
:: IMPROVED SCRIPT RELIABILITY
:: 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 COMMAND PROCESSES THE CHOICE COMMAND'S %ERRORLEVELS%
:: THERE IS A CMD.EXE BUG THAT PREVENTS BATCH SCRIPTS RUNNING CORRECTLY IN THE USER DESKTOP FOLDER %ONEDRIVE%\DESKTOP
:: IF YOU EXPERIENCE THIS RUN THE SCRIPT LITERALLY ANYWHERE ELSE.
:: CHOOSE 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
:: RUN THE SCRIPT [ANYWHERE] YOU LIKE UNLESS YOU HAVE THE ABOVE STATED DESKTOP BUG
:: YOU MUST [ALWAYS] RUN THE SCRIPT AS AN [ADMINISTRATOR]
:: BEGIN SCRIPT
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
PROMPT $G
COLOR 0A
TITLE Enter or Exit Safe Mode
PUSHD "%~dp0"
ECHO.
ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
ECHO : :
ECHO : Enter Or Exit Safe Mode :
ECHO : :
ECHO : Please save ALL open work before continuing :
ECHO : :
ECHO : By: SlyFox1186 :
ECHO : https://pastebin.com/u/slyfox1186 :
ECHO : https://stackoverflow.com/users/10572786/slyfox1186 :
ECHO : :
ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
ECHO.
PAUSE
:: PROMPT USER WITH CHOICES FIRST RUN
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 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: && GOTO FirstChoice
:: BEGIN SCRIPT RESTART
:: KILL ANY LEFTOVER PROCESS STILL RUNNING FROM PRIOR RUN TO AVOID ISSUES
:Restart
CLS && ECHO.
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
: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
TIMEOUT 1 /NOBREAK >NUL
:: PROMPT USER WITH CHOICES SEQENTIAL RUNS
:FirstChoice
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 objShell = CreateObject^("Shell.Application"^)
ECHO objShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
ECHO Else
ECHO Set objShell2 = WScript.CreateObject^("WScript.Shell"^)
ECHO objShell2.Run "bcdedit /Deletevalue {current} safeboot",0,True
ECHO objShell2.Run "bcdedit /Deletevalue {current} safebootalternateshell",0,True
ECHO objShell2.Run "shutdown -r -t 60 -f", 0, True
ECHO End IF
ECHO Set objShell = Nothing
ECHO Set objShell2 = Nothing
)> %TEMP%\SafeEXIT.vbs && wscript %TEMP%\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 %TEMP%\SafeEXIT.vbs
SET EchoEXIT=Exit Safe Mode ^&^& ECHO.
CALL :ConfirmChoice "%EchoEXIT%" && EXIT /B
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 objShell = CreateObject^("Shell.Application"^)
ECHO objShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
ECHO Else
ECHO Set objShell2 = WScript.CreateObject^("WScript.Shell"^)
ECHO objShell2.Run "bcdedit /set {current} safeboot minimal",0,True
ECHO objShell2.Run "bcdedit /set {current} safebootalternateshell yes",0,True
ECHO objShell2.Run "shutdown -r -t 60 -f", 0, True
ECHO End IF
ECHO Set objShell = Nothing
ECHO Set objShell2 = Nothing
)> %TEMP%\SafeCMD.vbs && wscript %TEMP%\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 %TEMP%\SafeCMD.vbs
SET EchoCMD=Safe Mode with Command Prompt ^&^& ECHO.
CALL :ConfirmChoice "%EchoCMD%" && EXIT /B
GOTO :EOF
:: CHOICE COMMAND: SAFE MODE WITH NETWORKING
:TryNET
IF NOT ERRORLEVEL 2 GOTO TrySAFE
(
ECHO IF WScript.Arguments.length = 0 Then
ECHO Set objShell = CreateObject^("Shell.Application"^)
ECHO objShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
ECHO Else
ECHO Set objShell2 = WScript.CreateObject^("WScript.Shell"^)
ECHO objShell2.Run "bcdedit /set {current} safeboot network",0,True
ECHO objShell2.Run "shutdown -r -t 60 -f", 0, True
ECHO End IF
ECHO Set objShell = Nothing
ECHO Set objShell2 = Nothing
)> %TEMP%\SafeNET.vbs && wscript %TEMP%\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 %TEMP%\SafeNET.vbs
SET EchoNET=Safe Mode with Networking ^&^& ECHO.
CALL :ConfirmChoice "%EchoNET%" && EXIT /B
GOTO :EOF
:: CHOICE COMMAND: SAFE MODE
:TrySAFE
IF NOT ERRORLEVEL 1 GOTO :EOF
(
ECHO IF WScript.Arguments.length = 0 Then
ECHO Set objShell = CreateObject^("Shell.Application"^)
ECHO objShell.ShellExecute "wscript", Chr^(34^) ^& WScript.ScriptFullName ^& Chr^(34^) ^& " Run", , "RunAs", 1
ECHO Else
ECHO Set objShell2 = WScript.CreateObject^("WScript.Shell"^)
ECHO objShell2.Run "bcdedit /set {current} safeboot minimal",0,True
ECHO objShell2.Run "shutdown -r -t 60 -f", 0, True
ECHO End IF
ECHO Set objShell = Nothing
ECHO Set objShell2 = Nothing
)> %TEMP%\SafeMODE.vbs && wscript %TEMP%\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 %TEMP%\SafeMODE.vbs
SET EchoSafe=Safe Mode ^&^& ECHO.
CALL :ConfirmChoice "%EchoSafe%" && EXIT /B
GOTO :EOF
:: SUBROUTINE: CONFIRM CHOICE
:ConfirmChoice
CLS && ECHO.
ECHO You have chosen: %~1
TIMEOUT 2 /NOBREAK >NUL
ECHO [1] Continue shutdown
ECHO [2] Restart script
ECHO [3] Exit script && ECHO.
CHOICE /C 123 /T 10 /D 2 /N
:: SUBROUTINE: CONFIRM CHOICE - EXIT SCRIPT
CLS && ECHO.
IF ERRORLEVEL 3 SHUTDOWN /A && ENDLOCAL && GOTO :EOF
:: SUBROUTINE: CONFIRM CHOICE - RESTART SCRIPT
IF ERRORLEVEL 2 (
SHUTDOWN /A
ENDLOCAL
GOTO Restart
)
:: SUBROUTINE: CONFIRM CHOICE - CONTINUE SHUTDOWN
IF ERRORLEVEL 1 (
ECHO Please wait few seconds for windows to reboot. && ECHO.
TIMEOUT 2 /NOBREAK >NUL
PAUSE && ENDLOCAL && GOTO :EOF
)