Como faço para desligar, reiniciar ou fazer logoff do Windows através de um arquivo bat?


660

Estou usando a Conexão de área de trabalho remota para entrar em uma estação de trabalho. Mas neste ambiente, não posso usar as opções de energia no Menu Iniciar. Preciso de uma maneira alternativa de desligar ou reiniciar.

Como controle o estado de energia do meu computador através da linha de comando?

Respostas:


1165

As maneiras mais comuns de usar o shutdowncomando são:

  • shutdown -s - Desliga.
  • shutdown -r - Reinicia.
  • shutdown -l - faz logoff.
  • shutdown -h - Hibernates.

    Nota: Existe uma armadilha comum em que os usuários pensam que -hsignifica "ajuda" (o que ocorre com todos os outros programas de linha de comando ... exceto shutdown.exequando significa "hibernação"). Eles então executam shutdown -he desligam acidentalmente seus computadores. Cuidado com isso.

  • shutdown -i- "Modo interativo". Em vez de executar uma ação, ele exibe uma caixa de diálogo da GUI.

  • shutdown -a - Interrompe um comando de desligamento anterior.

Os comandos acima podem ser combinados com estas opções adicionais:

  • -f- Força os programas a sair. Evita que o processo de desligamento fique travado.
  • -t <seconds>- Define o tempo até o desligamento. Use -t 0para desligar imediatamente.
  • -c <message>- Adiciona uma mensagem de desligamento. A mensagem terminará no log de eventos.
  • -y - Força uma resposta "sim" a todas as consultas de desligamento.

    Nota: Esta opção não está documentada em nenhuma documentação oficial. Foi descoberto por esses usuários do StackOverflow .


Quero garantir que outras respostas realmente boas também sejam mencionadas junto com esta. Aqui eles estão em nenhuma ordem particular.


188
Leia sobre o uso de -f (forçar) na próxima resposta. Diz o cara que não tinha e agora tem um computador preso no desligamento do outro lado do planeta durante o fim de semana (:
pasx

11
+1 apenas que usei em /<switch>vez de -<switch>. A seção de ajuda também usa /.
Legenda2k

Minha experiência: o uso da opção -s (desligamento) na área de trabalho remota (como o OP menciona) apenas finaliza a área de trabalho remota, mas deixa a máquina remota intocada.
Heri

3
Eu uso "-r" para máquinas remotas. Portanto, ele será reiniciado e não precisará de intervenção manual.
usar o seguinte código

6
Se você estiver em uma máquina remota, também poderá adicionar a -fopção para forçar a reinicialização. Caso contrário, sua sessão poderá fechar e um aplicativo teimoso poderá travar o sistema. Para forçar uma reinicialização imediata: shutdown -t 0 -r -f. Para uma opção mais amigável "dar-lhes algum tempo", você pode usar isto: shutdown -t 30 -r. O -festá implícito pelo tempo limite. (da edição proposta por Mateusz Konieczny )
Ole VV

375

Se você estiver em uma máquina remota, poderá também adicionar a opção -f para forçar a reinicialização. Caso contrário, sua sessão poderá fechar e um aplicativo teimoso poderá travar o sistema.

Eu uso isso sempre que quero forçar uma reinicialização imediata:

shutdown -t 0 -r -f

Para uma opção mais amigável "dê tempo a eles", você pode usar o seguinte:

shutdown -t 30 -r

Como você pode ver nos comentários, o -f está implícito pelo tempo limite.

O Brutus 2006 é um utilitário que fornece uma GUI para essas opções.


15
Lendo a ajuda para desligar no Windows 8.1, vejo: "Se o período de tempo limite for maior que 0, o parâmetro / f está implícito." E como o tempo limite padrão é de 30 segundos, acho que é preferível dar um tempo para o desligamento limpo e o desligamento forçado acontece após o tempo limite.
Zitrax 21/02

2
Este é um bom ponto. Acredito que quando escrevi isso, o sistema operacional que eu estava usando era o Windows XP. Vejo que a observação "/ f está implícita" também está no Windows 7. Eu modifiquei o exemplo de acordo.
precisa saber é o seguinte

2
Por padrão, eles têm 30 segundos. Eu uso para imediata: shutdown / r / t 0 e para o amigável: shutdown / r
dzampino

81

Ninguém mencionou a -mopção de desligamento remoto:

shutdown -r -f -m \\machinename

Além disso:

  • O -rparâmetro causa uma reinicialização (que geralmente é o que você deseja em uma máquina remota, pois a inicialização física pode ser difícil).
  • A -fopção de parâmetro força a reinicialização.
  • Você deve ter privilégios apropriados para desligar a máquina remota, é claro.

2
o nome da máquina pode ser um endereço IP? Ou seja, você pode fazer isso pela internet?
mcmillab

Se você pode acessar a máquina via \\IP.AD.DR.ESS(ou seja, as portas necessárias estão abertas e você possui as permissões necessárias), então sim, isso deve funcionar pela Internet.
Timothy Zorn

Eu tentei primeiro com -r only e não funcionou porque eu queria um desligamento remoto. Funcionou com shutdown -r -m. -f não era necessário.
Dchris

38

Resposta original: outubro de 2008

Você também tem todo o " rundll32.exe shell32.dll" série:

(veja atualização abaixo)

  • rundll32.exe user.exe,**ExitWindows** [Desligamento rápido do Windows]
  • rundll32.exe user.exe,**ExitWindowsExec** [Reinicie o Windows]

    rundll32.exe shell32.dll,SHExitWindowsEx n
    

onde nsignifica:

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

(pode ser combinado -> 6 = 2 + 4 FORCE REBOOT)


Atualização em abril de 2015 (mais de 6 anos depois):

1800 INFORMAÇÃO gentilmente aponta nos comentários :

Não use rundll32.exepara esse fim. Ele espera que a função que você passou na linha de comando tenha uma assinatura de método muito específica - ela não corresponde à assinatura do método ExitWindows.

Raymond CHEN escreveu:

A assinatura da função necessária para as funções chamadas por rundll32.exeé:

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

Isso não impediu as pessoas de usarem rundll32para chamar funções aleatórias que não foram projetadas para serem chamadas por rundll32, como user32 LockWorkStationou user32 ExitWindowsEx.

(oops)

A assinatura da função real para ExitWindowsEx é:

BOOL WINAPI ExitWindowsEx(UINT uFlags, DWORD dwReserved);

E para deixar claro:

Rundll32 é uma sobra do Windows 95 e foi preterido desde pelo menos o Windows Vista, porque viola muitas diretrizes de engenharia modernas.


3
Qual a diferença entre desligamento e desligamento?
ASDFG

17
@Asdfg hoje? Nenhum. Para o NT4 e anterior, a placa-mãe nem sempre suportava desligar, apenas desligar (o Windows estava completamente fechado, mas o PC ainda estava com energia elétrica). Somente o poweroff (se o hardware o suportasse no momento) fechou as janelas e cortou a energia elétrica. Hoje, tanto o desligamento quanto o desligamento fazem isso.
VonC

2
Não use o rundll32.exe para esse fim. Ele espera que a função que você passou na linha de comando tenha uma assinatura de método muito específica - ela não corresponde à assinatura do método ExitWindows.
1800 INFORMAÇÕES

2
@ 1800INFORMAÇÃO ponto muito bom. Reescrevi a resposta para deixar claro que essa não é uma opção válida.
VonC

3
Para ser justo, porém, realmente não importa que tipo de vazamento de memória ou corrupção de pilha você esteja causando se estiver desligando o PC imediatamente.
PRMan

10

Outra pequena dica: ao seguir a rota do arquivo em lotes, eu gostaria de abortá-lo caso eu o execute acidentalmente. Portanto, o arquivo em lotes chama o desligamento, mas deixa você no prompt de comando posteriormente.

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

Além disso, como está em um cronômetro, você tem a mesma emoção que quando caça em The Oregon Trail .


1
você pode colocar uma pausa no arquivo de banho, e depois abort comando, como a seqüência de anulação seria qualquer tecla
rsk82

@ rsk82, o fato de poder me safar ao digitar qualquer coisa também era uma limitação infeliz da minha cópia do Oregon Trail do TRS-80, mas, francamente, sempre considerei trapaça e meu irmão ficaria furioso sempre que eu o fizesse. Apenas dizendo: por que você quer enfurecer meu irmão?
Gavin

7

Quando remotamente conectado a uma máquina (o destino é o Windows XP de qualquer maneira; não tenho certeza sobre o destino do Windows Vista), embora o Desligamento no menu Iniciar seja substituído por Desconectar Sessão ou algo parecido, deve haver um chamado 'Segurança do Windows', que também a mesma coisa que Ctrl+ Alt+, Endcomo apontado por Owen.


Eu costumava usar esse método, mas ele não funciona mais, é a linha de comando.
User742864

Eu também tenho um gadget que tem botões para desligar, reiniciar, hibernar, bloquear que funciona no RDP.
user742864

7

Você provavelmente está ciente disso, mas por precaução: é muito mais fácil digitar shutdown -r(ou qualquer comando que você quiser) na caixa "Executar" e pressionar Enter.

Salva deixando arquivos em lote espalhados por toda parte.


sim ... Eu apenas gosto de ter o duplo-clique sentado lá ... isso é o que o arquivo bat -r é por muito; o)
Keng

17
cuidado para não colocá-lo em Programas> startup :)
Dean Rather

aw .. e um comportamento curioso será obtido se o código for colocado em um arquivo shutdown.bat. Tente!
:)

6

Eu escreveria isso no bloco de notas ou no WordPad para obter um comando básico de logoff:

@echo off
shutdown -l

É basicamente o mesmo que clicar em iniciar e fazer logoff manualmente, mas é apenas um pouco mais rápido se você tiver o arquivo em lotes pronto.


5

Estou atrasado para a festa, mas ainda não vi essa resposta. Quando você não deseja usar um arquivo em lotes ou digite o comando Você pode simplesmente definir o foco na área de trabalho e usar Alt+ F4.

O Windows perguntará o que você deseja fazer, selecione desligar ou reiniciar.

Para capturas de tela e até um vídeo, consulte: https://tinkertry.com/how-to-shutdown-or-restart-windows-over-rdp


3
@ Keng, lendo o problema real "Não consigo usar a função de desligamento / reinicialização no menu Iniciar" , parece-me que você deseja saber como fazer isso. A linha de comando é uma solução, o teclado é outra. Isso pode ajudar outros usuários que se deparam com essa pergunta e querem apenas uma solução fácil para desligar ou reiniciar.
msoft
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.