本质上,我们有 2 个批处理文件,如果您愿意,一个是“包装器”,它调用另一个批处理文件,因此它以/min
(最小化)开头。一旦启动了第二个批处理文件,该批处理文件就会结束。
这包含一个循环,它在关闭后不断产生一个 RDP 会话。
问题是,如果用户 ALT-TABs 并关闭批处理,他们只剩下一个空桌面(因为我们的任务是 kill explorer)。如果批处理循环结束,有没有办法强制重启机器?
谢谢!
本质上,我们有 2 个批处理文件,如果您愿意,一个是“包装器”,它调用另一个批处理文件,因此它以/min
(最小化)开头。一旦启动了第二个批处理文件,该批处理文件就会结束。
这包含一个循环,它在关闭后不断产生一个 RDP 会话。
问题是,如果用户 ALT-TABs 并关闭批处理,他们只剩下一个空桌面(因为我们的任务是 kill explorer)。如果批处理循环结束,有没有办法强制重启机器?
谢谢!
有一个标准的 cmd 命令:
shutdown /r
用法:关机[/i | /l | /s | /r | /g | /一个 | /p | /h | /e | /o] [/混合] [/f] [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]] 无 args 显示帮助。这与输入 /? 相同。 /?显示帮助。这与不键入任何选项相同。 /i 显示图形用户界面 (GUI)。 这必须是第一个选项。 /l 注销。这不能与 /m 或 /d 选项一起使用。 /s 关闭计算机。 /r 完全关闭并重新启动计算机。 /g 完全关闭并重新启动计算机。系统完成后 重新启动,重新启动所有已注册的应用程序。 /a 中止系统关闭。 这只能在超时期间使用。 /p 在没有超时或警告的情况下关闭本地计算机。 可以与 /d 和 /f 选项一起使用。 /h 休眠本地计算机。 可以与 /f 选项一起使用。 /hybrid 关闭计算机并为快速启动做好准备。 必须与 /s 选项一起使用。 /e 记录计算机意外关闭的原因。 /o 进入高级启动选项菜单并重新启动计算机。 必须与 /r 选项一起使用。 /m \\computer 指定目标计算机。 /t xxx 将关机前的超时时间设置为 xxx 秒。 有效范围为 0-315360000(10 年),默认值为 30。 如果超时时间大于 0,则 /f 参数为 默示。 /c "comment" 对重新启动或关闭的原因进行注释。 最多允许 512 个字符。 /f 强制关闭正在运行的应用程序而不预先警告用户。 当值大于 0 时,隐含 /f 参数 为 /t 参数指定。 /d [p|u:]xx:yy 提供重新启动或关闭的原因。 p 表示计划重启或关闭。 u 表示原因是用户定义的。 如果既没有指定 p 也没有指定 u,则重新启动或关闭 计划外。 xx 是主要原因号(小于 256 的正整数)。 yy 是次要原因号(小于 65536 的正整数)。
我的建议:
您真的需要批次可见(最小化)还是可以隐藏?
如果可以隐藏,只需使用 VBScript 将其隐藏:
With CreateObject("W"&"Script.Shell")
.Run "LongRun.bat", 0
End With
如果您确实需要显示批处理,您可以制作一个隐藏脚本,等待批处理终止并重新启动。
第 1 步:启动隐藏脚本 ( Start.vbs
):
Set WsShell = CreateObject("W"&"Script.Shell")
WsShell.Run "Hidden.vbs", 0
第 2 步:Hidden.vbs
将启动批处理并等待它返回:
'This script is supposed to start hidden!
Set WsShell = CreateObject("W"&"Script.Shell")
WsShell.Run "LongRun.bat", 7, True
'WsShell.Run "REBOOT.EXE ..." 'Must remove comment and complete command line
MsgBox "Rebooting..."
现在也在LongRun.bat
运行Hidden.vbs
(但不可见)。
如果以某种方式LongRun.bat
终止,Hidden.vbs
将继续执行并重新启动。
编辑:注意"W"&"Script.Shell"
是一样的,"WScript.Shell"
但 StackOverflow 不允许我写它!