85

I am trying to hibernate my computer from the command. I was using shutdown /s /t 20 to shutdown the the computer. I change /s to /h to hibernate and now it just returns the usage text as if it doesn't recognise what I have entered. In this is does say

/h         Hibernate the local computer.

Is there something else that I need to use with /h to get it to hibernate?

1
  • But in this case (the case that you use waitfor or something like that) you can't abort the scheduled hibernation....
    – user116726
    Feb 3, 2012 at 21:57

14 Answers 14

94

I don't believe you can set a time for hibernation, unfortunately.

Try:

ping -n 20 127.0.0.1 > NUL 2>&1 && shutdown /h /f

The ping is a hackish way of delaying the action. -n 20 should wait for 20 seconds.

(the double && will allow you to do a Ctrl+C to cancel the operation, but if you use a simple & then pressing Ctrl+C will only break the timer and then continue to shut down)

4
  • 1
    haha, +1 for this nice "sleep" replacement :) i wrote my own .exe to do this, but .. hehahahahr.
    – akira
    May 26, 2010 at 7:42
  • 8
    Why we can't set time for hibernate? it wouldn't difficult for windows developers to allow this feature. but why they didn't? O.o Oct 17, 2014 at 4:35
  • Nice but && not working in powershell
    – Dr Deo
    Oct 12, 2018 at 20:06
  • 1
    Note: the > NUL 2>&1 part will prevent any output from the ping (for more see related question).
    – Top-Master
    Oct 3, 2019 at 4:38
49

You could also consider using "timeout" or "waitfor" commands in a similar manner.

timeout /t 20 /NOBREAK > NUL && shutdown /h

or

waitfor NUL /t 20 || shutdown /h

More here: How do I make a batch file wait / sleep for some seconds?

2
  • 2
    Both options works, but the first is better. If you want to cancel the command via <kbd>Ctrl</kbd>+<kbd>C</kbd>, the first option will be canceled, but the second will receive a false in the first condition and jump to shutdown command directly. Jun 14, 2018 at 15:43
  • The second example can be made better by using waitfor NUL /t 20 && shutdown /h instead.
    – Richard
    Sep 17, 2020 at 6:46
13

I use the following:

sleep 20 && shutdown /h /f

Or this if I want it off at a certain time:

At 22:30 shutdown /h /f
2
  • i hsve tried the command At 22:30 shutdown /h /fin cmd prompt , i got a message like access denied but i'm the admin in my pc. awaiting for your respose
    – Smart003
    May 27, 2018 at 5:11
  • I believe in Windows 10 they've changed the permissions required to use 'at'. It's only intended for system jobs and you have to be SYSTEM account in order to execute it. Yes, SYSTEM is more privileged that admin accounts (locally) and yes, there is a way to get a command prompt under the SYSTEM account. Nov 30, 2018 at 3:42
10

Of course you can set TIME for hibernation.

If you really want to hibernate your computer after a specific time, all you need to do is to enter this command below into the cmd. i.e:

timeout /t 36000 /nobreak && shutdown /h

Now the computer will start to count down from 36000 to 0 before it will hibernate. But you should note that you can change 36000 into any number of seconds that suits you.

9

I think that it complains about time. Just put shutdown /h and it should work.

3

If you have cygwin it's very simple: sleep 45m && shutdown /h

You can instruct sleep in minutes, hours, seconds and even days. Check out this answer about sleep.

2

Did you try the Windows Task Scheduler? If you have the script you can set it to run at a certain time - this should answer the time delay question.

2

i always use this:

shutdown -h

2
  • It doesn’t matter, you can’t time a hibernation (for some reason).
    – Synetech
    Dec 14, 2013 at 23:38
  • @Synetech It wouldn't difficult for windows developers to allow this feature. but why they didn't? O.o Oct 17, 2014 at 4:35
2

I was also searching for timed hibernate for long time. Finally I made the following solution:

Create a bat file as below:

timeout /t %1 /nobreak && shutdown /h

Suppose it is saved in C:\hibernate.bat

Then open Run command (Win+R) and run the bat file with the timeout seconds as below:

C:\hibernate.bat [timeout]

1
  • 1
    The best solution IMHO. It's not hackish (like using ping, or redirecting timeout to NUL), it's practical. Jan 9, 2020 at 18:24
2

If you are using PowerShell or have the Windows terminal as your default command-line interface then this is the only solution that has worked for me:

sleep 30 | shutdown /h /f

Of course you can change 30 to whatever amount of seconds you would like.

2
  • Could you explain the need for /f parameter? Just sleep 30 | shutdown /h worked fine for me. Also, hibernation needs to be enabled, in order for this command to work.
    – zigzag
    Jul 20, 2022 at 6:49
  • Update: now it hibernates instantly when using the | pipeline operator (PowerShell 7), but works correctly using the && pipeline operator: sleep 30 && shutdown /h
    – zigzag
    Dec 3, 2022 at 0:57
1

Here is a VBScript that will prompt for the number of seconds before hibernation:

Dim intSeconds,wshShell
intSeconds = InputBox("Enter number of seconds to wait","Hibernate timer")
Wscript.Sleep intSeconds
Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run "shutdown.exe -h -f"
0

Instead of making multiple batch files, each with different number of seconds to wait, create and use the hibernate-later.bat file, which asks you when exactly you want to hibernate.

Example

@echo off
setlocal enabledelayedexpansion

echo ===
:question
set "answer=0"
set /p answer="Hibernate after how many minutes? "
cls

rem Validate.
echo %answer%| findstr /r "^[1-9][0-9]*$">nul
if %errorlevel% equ 0 (
    echo Counting...
) else (
    echo Invalid number.
    goto :question
)

set /A timeout=%answer% * 60
timeout /t !timeout! /nobreak

shutdown /h /f
pause

Note that closing the Window cancels hibernate (for me at least), which is useful if you reconsider and decide to change the timer.

0

I used the solution proposed by Radko Dinev for some time. However, converting the number of hours and minutes into seconds every time started to bother me. That's why I decided to write the program myself. I would like to leave here a link to such a program that I authored. Maybe it will be useful to someone who will be looking for a similar solution in the future. The program is free, I do not receive any benefits for downloading and using it. You don't have to convert minutes and hours to seconds. It is also possible to turn off the monitor earlier. hibernationdelayer

1
  • Please read the help on self promotion. And teh question asked for a command line solution. Jan 18 at 13:54
-2

Instead of / use -.

Use the below command in the CMD as admin priv and test

shutdown -h

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .