如何使用批处理文件关闭所有活动窗口/应用程序

3
我是一个初学者。我对cmd感到好奇,所以我想制作一个批处理文件,可以安全地关闭活动窗口并关闭/重新启动计算机。我发现了像这样的命令-
taskkill /im "program.exe"
tasklist
shutdown -s
但是我想关闭所有活动窗口,但不使用强制方式。如果有特定的命令或某些命令的组合,请提及。先谢谢。
PS-我看到了powershell,但我想知道是否可以使用批处理文件(cmd命令)实现此目的。以下是链接: 如何关闭所有窗口

1
Shutdown /s会进行优雅的关机,而shutdown /s /f会强制关闭所有程序。如果你想“关闭活动窗口但不强制关闭”,那么使用shutdown /s即可实现。如果某些程序拒绝关闭 - 例如记事本提示保存文件 - 那么你的脚本在关机时会有什么不同的处理方式呢? - TessellatingHeckler
@TessellatingHeckler 实际上,我想保存并关闭我的应用程序- 因为当我匆忙时,我想使用这个批处理文件。 - xcepti0n
@TessellatingHeckler(继上一条评论)如果有这样的选项,那就这样做,否则shutdown /s对我来说也可以。谢谢你友好的回复,我不知道它是这样工作的。 - xcepti0n
1
要求一个应用程序退出,Windows会在内部向应用程序发送一个WM_QUIT消息,并等待应用程序自行退出。为了强制关闭它,Windows会在应用程序之外操作并结束进程。我不知道有没有内部消息"保存并退出" - 每个应用程序对"保存"的理解都不同 - 而且Windows无法进行保存,因为它完全不知道程序正在做什么。我不能说这是不可能的,但我不认为你可以以任何明智的通用方式做到这一点。 - TessellatingHeckler
对于“匆忙”的情况,也许shutdown命令的参数/h会有用。在Win10上,shutdown /?命令列出了另一个参数/hybrid,看起来很有希望。 - Stephan
3个回答

5
如果你在explorer.exe上执行treekill,它将关闭除后台进程以外的所有其他程序。那些批处理脚本只有在以异常方式调用它们时才会起作用,这会使它们成为后台进程、系统进程,或者它们不是explorer.exe的子进程。
这里是我treekill explorer方法的最快参考实现。
@echo off
echo closing all programs...
taskkill /f /t /im explorer.exe
explorer.exe

这是一个结合Hibernate实现快速关闭和启动脚本的示例,使用了我的treekill explorer方法。
@echo off
echo shutting down...
echo closing all programs...
taskkill /f /t /im explorer.exe
echo hibernating...
shutdown /f /h
echo restoring...
explorer.exe
echo thanks you for using JessieTessie's fast shutdown and startup.

不要杀掉Excel、Teams等应用程序。 - N.K

0

你可以做

@echo off
@powershell Get-Process | Where-Object {$_.MainWindowTitle -ne ""} | stop-process
taskkill /f /im explorer.exe

它将执行PowerShell命令,查找并关闭所有未隐藏或提升的运行中程序,使用窗口标题。 但它会关闭所有应用程序,包括您自己的。 为了防止这种情况,您需要重新编写它的C++代码(您可以使用system("somecommand")从windows.h),并在执行closeAll命令之前在代码中加入freeconsole()。但是您需要找到如何恢复控制台。


虽然这段代码可能回答了问题,但是提供关于为什么和/或如何回答问题的额外背景信息可以提高其长期价值。 - Anatolii

-1
title Kill all running apps
cd c:\windows\System32
for /f "skip=3 tokens=1" %%i in ('TASKLIST /FI "USERNAME eq %userdomain%\%username%" /FI "STATUS eq running"') do (
if not "%%i"=="svchost.exe" (
if not "%%i"=="explorer.exe" (
if not "%%i"=="cmd.exe" (
if not "%%i"=="tasklist.exe" (
echo.
taskkill /f /im "%%i" 
taskkill /f /im explorer.exe
echo.
)
)
)
)
)
pause

1
添加一些说明在答案中将以下与编程相关的内容从英文翻译成中文。仅返回翻译后的文本: - ray
这段代码关闭了我的应用程序,然后(具有讽刺意味的是)自己卡住了,并显示一个对话框,上面写着“无法正常启动关闭所有正在运行的应用程序,是否要关闭。”或类似的内容。 - Kirk Ross

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接