Cmd 我需要一个简单的切换脚本的Windows应用程序称为防守者控制

Cmd 我需要一个简单的切换脚本的Windows应用程序称为防守者控制,cmd,toggle,contextmenu,Cmd,Toggle,Contextmenu,我正在使用这个名为的应用程序。它与命令行开关DefenderControl.exe/D一起使用以禁用Windows Defender,与命令行开关DefenderControl.exe/E一起使用以启用Windows Defender。我试图创建和修改其他切换脚本,但我不能使一个工作。我对脚本编写知之甚少。我计划将其添加到右键单击上下文菜单中,以快速禁用Windows Defender,而无需启动应用程序,然后禁用它。提前谢谢 DefenderControl.exe /D DefenderCo

我正在使用这个名为的应用程序。它与命令行开关DefenderControl.exe/D一起使用以禁用Windows Defender,与命令行开关DefenderControl.exe/E一起使用以启用Windows Defender。我试图创建和修改其他切换脚本,但我不能使一个工作。我对脚本编写知之甚少。我计划将其添加到右键单击上下文菜单中,以快速禁用Windows Defender,而无需启动应用程序,然后禁用它。提前谢谢

DefenderControl.exe /D

DefenderControl.exe /E

这会将状态写入备用数据流,从技术上讲,它是一个文件,但绑定到批处理文件,因此状态在重新启动后仍然有效:

@echo off
REM get current status:
<"%~f0:status" set /p status=
echo Currently: %status%
if "%status%"=="D" (
   defendercontrol.exe /E
   echo E>"%~f0:status"
) else (
   defendercontrol.exe /D
   echo D>"%~f0:status"
)

对于第一次运行,状态为空,处理方式与E转到else分支时相同

从上下文菜单使脚本工作的解决方案是提升它

@echo off
CLS
ECHO.

:init
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO.

ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " "  >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
"%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %*
exit /B

:gotPrivileges
setlocal & pushd .
cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul  &  shift /1)

REM get current status:
<"%userprofile%\defendercontrol.status" set /p status=
echo Currently: %status%
if "%status%"=="D" (
   defendercontrol.exe /E
   echo E>"%userprofile%\defendercontrol.status"
) else (
   defendercontrol.exe /D
   echo D>"%userprofile%\defendercontrol.status"
)

你真的应该显示你的尝试,否则这只是一个离题脚本请求。你想切换状态在重新启动后继续存在吗?如果创建脚本很重要,那么就没有必要了。。。否则为什么不:完美谢谢:再次感谢你的剧本。在我把它添加到上下文菜单之前,一切都正常,然后它就不会运行了。有什么想法吗?把它加入上下文菜单?我不明白。我把批处理文件转换成了一个.exe,它运行得很好。但当我通过注册表将其添加到右键单击上下文菜单时,它不会运行。我也有一些批处理文件,我将其转换为.exe并添加到上下文菜单中,它们都可以工作。%~f0引用批处理文件本身。如果您将其转换为EXE,这可能是无用的。尝试用%userprofile%\defendercontrol.status替换%f0:status这三个