![寻找在 Windows 重启时运行批处理文件的方法](https://linux22.com/image/1633067/%E5%AF%BB%E6%89%BE%E5%9C%A8%20Windows%20%E9%87%8D%E5%90%AF%E6%97%B6%E8%BF%90%E8%A1%8C%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E7%9A%84%E6%96%B9%E6%B3%95.png)
我有一个批处理脚本,希望每次系统重启时运行它。
目前,我将批处理脚本放在
C:\ProgramData\Microsoft\Windows\开始菜单\程序\StartUp
但这并不能达到目的,因为即使在启动时它也会启动脚本。
因此,我正在寻找一种仅在系统重启时运行脚本的方法。
答案1
每次关机/重启/断电后,Windows 都会在系统日志中生成事件 ID 为 1074 的事件日志。
因此,我们可以使用一个简单的命令来确定上次关机是否实际上是关机或重启:
for /f "tokens=3 delims=: " %%a in ('wevtutil qe system "/q:*[System [(EventID=1074)]]" /rd:true /f:text /c:1 ^| find /i "Shutdown type:"') do if "%%~a"=="restart" (echo System has done a restart)
然后,我们可以先创建一个批处理文件,该文件仅在系统重启时启动批处理文件。(将值设置%BatchFile%
为批处理文件的路径)
@echo off
::!!!ATTENTION!!!
set "BatchFile=BATCH FILE PATH HERE"
for /f "tokens=3 delims=: " %%a in ('wevtutil qe system "/q:*[System [(EventID=1074)]]" /rd:true /f:text /c:1 ^| find /i "Shutdown type:"') do if "%%~a"=="restart" (start "" "%BatchFile%")
这个程序会将自身添加到启动中,检查系统是否已从重启启动,然后执行主文件,否则不执行任何操作:
@echo off
::!!!ATTENTION!!!
set "BatchFile=BATCH FILE PATH HERE"
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "RebootChecker" /d "cmd.exe /c "%0"" /f
for /f "tokens=3 delims=: " %%a in ('wevtutil qe system "/q:*[System [(EventID=1074)]]" /rd:true /f:text /c:1 ^| find /i "Shutdown type:"') do if "%%~a"=="restart" (start "" "%BatchFile%")