【问题标题】:How do I shutdown, restart, or log off Windows via a bat file?如何通过 bat 文件关闭、重新启动或注销 Windows?
【发布时间】:2010-09-14 19:22:38
【问题描述】:

我一直在使用Remote Desktop Connection 进入工作站。但是在这种环境下,我无法使用开始菜单中的电源选项。我需要一种替代方法来关闭或重新启动。

如何通过命令行控制电脑的电源状态?

【问题讨论】:

    标签: windows batch-file command-line restart shutdown


    【解决方案1】:

    使用shutdown 命令的最常用方法是:

    • shutdown -s — 关闭。
    • shutdown -r — 重新启动。
    • shutdown -l — 注销。
    • shutdown -h — 休眠。

      注意:有一个常见的陷阱,用户认为-h 表示“帮助”(它对所有其他命令行程序都如此......除了shutdown.exe,它的意思是“休眠”)。然后他们运行shutdown -h 并意外关闭了他们的计算机。请注意这一点。

    • shutdown -i — “交互模式”。它不执行操作,而是显示一个 GUI 对话框。

    • shutdown -a — 中止之前的关机命令。

    以上命令可以与这些附加选项结合使用:

    • -f — 强制程序退出。防止关机过程卡住。
    • -t <seconds> — 设置关机前的时间。使用-t 0 立即关机。
    • -c <message> — 添加关闭消息。该消息将最终出现在事件日志中。
    • -y — 对所有关闭查询强制回答“是”。

      注意:此选项未记录在任何官方文档中。被these StackOverflow users发现。


    我想确保与这个答案一起提到其他一些非常好的答案。在这里它们没有特定的顺序。

    【讨论】:

    • 在下一个答案中阅读有关使用 -f (强制)的信息。那个人说,周末在地球的另一边,现在有一台电脑卡在关机状态(:
    • +1 只是我使用了/<switch> 而不是-<switch>。帮助部分也使用/
    • 我的经验:在远程桌面中使用 -s 选项(关闭)(如 OP 所述)只会终止远程桌面,但不会影响远程机器。
    • 我对远程机器使用“-r”。所以它会重新启动,不需要人工干预。
    • 如果您在远程计算机上,您可能还需要添加-f 选项来强制重启。否则您的会话可能会关闭,并且顽固的应用程序可能会挂起系统。强制立即重启:shutdown -t 0 -r -f。对于更友好的“给他们一些时间”选项,您可以使用:shutdown -t 30 -r-f 隐含在超时中。 (来自Mateusz Konieczny 提议的编辑)
    【解决方案2】:

    如果您在远程计算机上,您可能还需要添加 -f 选项以强制重新启动。否则您的会话可能会关闭,并且顽固的应用程序可能会挂起系统。

    每当我想强制立即重启时,我都会使用它:

    shutdown -t 0 -r -f
    

    为了更友好的“给他们一些时间”选项,您可以使用这个:

    shutdown -t 30 -r
    

    正如您在 cmets 中看到的,-f 隐含在超时中。

    Brutus 2006 is a utility that provides a GUI for these options.

    【讨论】:

    • 阅读 Windows 8.1 关机帮助我看到:“如果超时时间大于 0,则隐含 /f 参数。” 默认超时为30 秒我认为最好给一些时间干净关机,然后在超时后强制关机。
    • 这是一个很好的观点。我相信当我写这篇文章时,我使用的操作系统是 Windows XP。我看到 Windows 7 中也有“/ f 是隐含的”注释。我已经相应地修改了这个例子。
    • 默认情况下他们有 30 秒。我立即使用:shutdown /r /t 0 和友好:shutdown /r
    【解决方案3】:

    没有人提到远程关机的-m选项:

    shutdown -r -f -m \\machinename
    

    还有:

    • -r 参数会导致重新启动(这通常是您希望在远程计算机上执行的操作,因为物理启动可能会很困难)。
    • -f 参数选项强制重启。
    • 当然,您必须具有适当的权限才能关闭远程计算机。

    【讨论】:

    • 机器名可以是IP地址吗?即,您可以通过互联网进行此操作吗?
    • 如果您可以通过\\IP.AD.DR.ESS 访问机器(即必要的端口已打开并且您拥有所需的权限),那么是的,这应该可以通过互联网工作。
    • 我第一次尝试只使用 -r 但它不起作用,因为我想要远程关机。它与关闭 -r -m 一起使用。 -f 不需要。
    【解决方案4】:

    原始答案:2008 年 10 月

    你也得到了所有rundll32.exe shell32.dll系列:

    (见下文更新)

    • rundll32.exe user.exe,**ExitWindows** [快速关闭 Windows]
    • rundll32.exe user.exe,**ExitWindowsExec** [重启 Windows]

      rundll32.exe shell32.dll,SHExitWindowsEx n
      

    n 代表:

    • 0 - LOGOFF
    • 1 - SHUTDOWN
    • 2 - REBOOT
    • 4 - FORCE
    • 8 - POWEROFF

    (可以组合 -> 6 = 2+4 FORCE REBOOT


    2015 年 4 月更新(6 年后):

    1800 INFORMATION 请指出in the comments

    请勿将rundll32.exe 用于此目的。它期望您在命令行上传递的函数具有非常具体的方法签名 - 它与 ExitWindows 的方法签名不匹配。

    Raymond CHEN 写道:

    rundll32.exe调用的函数需要的函数签名是:

    void CALLBACK ExitWindowsEx(HWND hwnd, HINSTANCE hinst,
           LPSTR pszCmdLine, int nCmdShow);
    

    这并没有阻止人们使用rundll32 来调用并非设计为由rundll32 调用的随机函数,例如user32 LockWorkStationuser32 ExitWindowsEx

    (哎呀)

    ExitWindowsEx 的实际函数签名是:

    BOOL WINAPI ExitWindowsEx(UINT uFlags, DWORD dwReserved);
    

    为了让它一目了然:

    Rundll32 是 Windows 95 的遗留物,至少从 Windows Vista 开始就已被弃用,因为它违反了许多现代工程准则。

    【讨论】:

    • 关机和关机有什么区别?
    • @Asdfg 今天?没有。 NT4及之前的主板并不总是支持关机,只支持关机(windows完全关闭,但PC仍处于通电状态)。只有关机(如果硬件当时支持它)关闭窗口切断电源。今天,shutdown 和 poweroff 都是这样做的。
    • 不要为此目的使用 rundll32.exe。它期望您在命令行上传递的函数具有非常具体的方法签名 - 它与 ExitWindows 的方法签名不匹配。
    • @1800INFORMATION 非常好。我已经重写了答案,以明确这不是一个有效的选项。
    • 公平地说,如果您立即关闭 PC,您会导致何种类型的内存泄漏或堆栈损坏并不重要。
    【解决方案5】:

    另一个小提示:在执行批处理文件路径时,我希望能够中止它,以防我意外运行它。所以批处理文件会调用关闭,但之后会让您在命令提示符下。

    @echo off
    echo Shutting down in 10 seconds. Please type "shutdown /a" to abort.
    cmd.exe /K shutdown /f /t 10 /r
    

    另外,由于它是在计时器上的,因此您会获得与hunting in The Oregon Trail 时相同的快感。

    【讨论】:

    • 你可以在bath文件中放暂停,然后中止命令,这样中止顺序可以是任意键
    • @rsk82,能够逃脱打字也是我的俄勒冈小径的 TRS-80 副本的一个不幸限制,但坦率地说,我一直认为它作弊,每当我做到了。只是说:你为什么要激怒我的兄弟?
    【解决方案6】:

    当远程进入机器时(目标是 Windows XP;我不确定目标是 Windows Vista),虽然开始菜单上的 ShutdownDisconnect Session 取代或类似的东西,应该有一个名为“Windows Security”的东西,它也与 Ctrl + Alt + End 做同样的事情,正如所指出的那样欧文。

    【讨论】:

    • 我以前用那个方法但是现在不行了,命令行就可以了。
    • 我还有一个小工具,它具有在 RDP 中工作的关机、重启、休眠、锁定按钮。
    【解决方案7】:

    您可能已经意识到这一点,但以防万一:在“运行”框中输入shutdown -r(或您喜欢的任何命令)并按回车键会更容易。

    保存到处都是批处理文件。

    【讨论】:

    • 是的...我只是喜欢双击坐在那里...这也是 -r bat 文件的用途;o)
    • 小心不要把它放在程序中->启动:)
    • aw.. 如果将代码放在shutdown.bat 文件中,将获得奇怪的行为。试试吧! :)....
    【解决方案8】:

    我会在NotepadWordPad 中写这个作为基本的注销命令:

    @echo off
    shutdown -l
    

    这与手动单击开始和注销基本相同,但如果您准备好批处理文件,则速度会稍快一些。

    【讨论】:

      【解决方案9】:

      我迟到了,但还没有看到这个答案。 当您不想使用批处理文件或键入命令时。您可以将焦点设置到桌面,然后使用 Alt + F4

      Windows 会询问您要做什么,选择关闭或重新启动。

      有关屏幕截图甚至视频,请参阅:https://tinkertry.com/how-to-shutdown-or-restart-windows-over-rdp

      【讨论】:

      • @Keng,阅读实际问题“我无法在开始菜单中使用关机/重启功能”在我看来你想知道如何要做到这一点。命令行是一种解决方案,键盘是另一种解决方案。它可能会帮助其他偶然发现这个问题并且只是想要一个简单的解决方案来关闭或重启的用户。
      【解决方案10】:

      shutdownrundll32.exe shell32.dll,SHExitWindowsEx n 命令的一些补充。

      LOGOFF - 允许您通过 sessionid 或会话名称注销用户

      PSShutdown - 需要从 windows sysinternals 下载。

      bootim.exe - windows 10/8 关闭 iu

      change/chglogon - 阻止新用户登录或进行另一个会话

      NET SESSION /DELETE - 结束用户会话

      wusa /forcerestart /quiet-windows更新管理器也可以重启机器

      tsdiscon - 断开你的连接

      rdpinit - 将您注销,但目前我找不到任何文档

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        相关资源
        最近更新 更多