"Energie sparen" über Batch Datei

FerrariF100GT

Lieutenant
Registriert
Juli 2004
Beiträge
546
Hi,

ich möchte mir eine .bat Datei anlegen um den Rechner in den Energie sparen Modus zu schicken. Ich hab dazu schon ewig gegoogelt, aber irgendwie find ich nur die Befehle für den normalen Standby und Hibernate, was mir nichts bringt.
Ich brauch den Zustand, wo die Power Led blinkt.

Weiß jemand wie das geht?
 
1) Unter Windows 7 werden keine .bat Dateien angelegt sondern .cmd Dateien.

2) Das kann man folgendermaßen umsetzen:

- Shell öffnen, d.h. die Windows Schaltfläche Start betätigen und in das suchfeld cmd eingeben
und mit der ENTER Taste bestätigen.

- In der Shell den Befehl powercfg -list eingeben.

- Es werden die GUIDs der Energieschemen (Ausbalanciert, Höchstleistung, Energiesparmodus) ausgegeben.

- Jetzt in der Shell powercfg -setactive GUID eingeben, also ungefähr so:

powercfg -setactive 8cdccdc-ccdc3434-44343-34f4-545454545454

- Das Ergebnis unter Systemsteuerung -> Energieoptionen kontrollieren.

- Wenn es funktioniert einfach die Befehlszeile in eine .cmd Datei kopieren und diese bei Bedarf ausführen.


Hier noch zwei Links:

http://technet.microsoft.com/en-us/library/cc748940%28v=ws.10%29.aspx

http://support.microsoft.com/kb/980869/de


ibm9001
_______________
Daddelmaschine: i5 2500K/4GHz/EKL Brocken & NOCTUA NF-F12 // Fatal1ty P67 Performance // 16GB (Corsair Vengeance LP,DDR3-1600) // Sapphire 6950@1536_Shader@880MHz@1.175V // DELL P2210 // SB Audigy 2 // Samsung 470 64GB SSD
_______________
Internet-Kiste: AMD Athlon II X3 435 @ 4Core @1.1875V + SCYTHE Big Shuriken // ASROCK A785GMH/128M // 12 GByte Ram // Sapphire HD 6670 low Profile // Dell UltraSharp 2007FP // Samsung 470 64GB SSD
 
HiHo,
Ich hab mir so eine Batch gebastelt:
Code:
@echo OFF & SETLOCAL
MODE CON COLS=62 LINES=8
COLOR F1
TITLE Monitor Timeout & Energiesparmodus
::------------------------------------------
::
:: Hilfe unter http://support.microsoft.com/kb/324347/de
::
:: Systemsteuerung\System und Sicherheit\Energieoptionen
::
::------------------------------------------
:ANFANG
set title=%~n0
CLS
TITLE Monitor Timeout
echo.
echo. Monitor Timeout Einstellungen...
echo. Bitte Timeout in Minuten eingeben und mit Enter bestaetigen: 
set /p TIMEOUT=
set /a TIMEOUT2=%TIMEOUT%+0
IF %TIMEOUT2% == %TIMEOUT% ( C:\Windows\System32\powercfg -change -monitor-timeout-ac %TIMEOUT% ) else ( goto ERRORMARKE )
if errorlevel 1 goto ERRORMARKE
CLS
echo.
echo  ------------------------------------------------------- 
echo.   Monitor Timeout Einstellungen vorgenommen "%TIMEOUT% Min."
echo  ------------------------------------------------------- 
echo.
echo.
FOR /l %%a in (3,-1,1) do (TITLE Monitor Timeout set %%as&ping -n 2 -w 1 127.0.0.1>NUL)
a
CLS
TITLE 
echo.
echo  ------------------------------------------------------- 
echo.   Moechten Sie weitere Einstellungen vornehmen?
echo  ------------------------------------------------------- 
echo.
choice  /C JN /T 10 /D N /M "   Druecken Sie J fuer Ja, oder N fuer Nein."
if errorlevel 2 goto :EOF

CLS
set title=%~n0
TITLE Energiesparmodus Timeout

echo.
echo. Energiesparmodus Einstellungen...
echo. Bitte Timeout in Minuten eingeben und mit Enter bestaetigen: 
set /p TIMEOUT=
set /a TIMEOUT2=%TIMEOUT%+0
IF %TIMEOUT2% == %TIMEOUT% ( C:\Windows\System32\powercfg -change -standby-timeout-ac %TIMEOUT% ) else ( goto ERRORMARKE )
if errorlevel 1 goto ERRORMARKE
CLS
echo.
echo  ------------------------------------------------------- 
echo.   Energiesparmodus Einstellungen vorgenommen "%TIMEOUT% Min."
echo  ------------------------------------------------------- 
echo.
echo.
FOR /l %%a in (3,-1,1) do (TITLE Energiesparmodus Timeout set %%as&ping -n 2 -w 1 127.0.0.1>NUL)
GOTO :EOF

:ERRORMARKE
CLS
TITLE Fehler!
echo.
echo  ------------------------------------------------------- 
echo    Es wurde die ungueltige Taste "%TIMEOUT%" eingegeben.
echo  ------------------------------------------------------- 
echo.
echo.
PAUSE
GOTO ANFANG
Wenn du willst mache ich daraus eine *.exe Datei mit schicken Icon...
 
Hio,

ich hätte da mal noch eine Frage zu: ich möchte die Standbyzeit für den Monitor gerne entweder auf 1 oder 20 Minuten einstellen. Jetzt habe ich dafür jeweils eine BAT:
Code:
C:\Windows\System32\powercfg -change -monitor-timeout-ac = 20
bzw.
Code:
C:\Windows\System32\powercfg -change -monitor-timeout-ac = 1

Wie kann ich daraus eine einzige Datei basteln, die je nach aktuellem Wert den anderen einstellt? Also in der Art:
Code:
If monitor-timeout = 1 (C:\Windows\System32\powercfg -change -monitor-timeout-ac = 20) else (C:\Windows\System32\powercfg -change -monitor-timeout-ac = 1)
Das sollte doch theoretisch so klappen - ich weiß nur nicht, wie ich an den aktuell gesetzten Wert komme, um das bei If ... zu prüfen. Vermutlich komm ich da irgendwie mit powercfg /query ran ...!?
 
Zuletzt bearbeitet:
Hi
ich hab nochmal darüber Nachgedacht und etwas geschaut und ich denke das wird doch gehen, aber auf Umwegen und zwar so.
Als erstes muss du dir die powercfg -q Werte auslesen, dann brauchst du den Wert aus der Untergruppe (Bildschirm) den Energieeinstellungswert von (Bildschirm ausschalten nach) unter Index der aktuellen Wechselstromeinstellung.

Die Werte sind:

  • 1 min - 0x0000003c
  • 5 min - 0x0000012c
  • 10 min - 0x00000258
  • 20 min - 0x000004b0
Danach kannst du mit den Wert arbeiten den du brauchst und dir eine If-Else zusammenbasteln.

Aus meiner Energieschemas

GUID des Energieschemas: 381b4222-f694-41f0-9685-ff5bb260df2e (Ausbalanciert)
...
GUID der Untergruppe: 7516b95f-f776-4464-8c53-06167f40cc99 (Bildschirm)
GUID-Alias: SUB_VIDEO
GUID der Energieeinstellung: 3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e (Bildschirm ausschalten nach)
GUID-Alias: VIDEOIDLE
Minimum der m”glichen Einstellung: 0x00000000
Maximum der m”glichen Einstellung: 0xffffffff
Schrittweise Erh”hung der m”glichen Einstellungen: 0x00000001
Einheiten der m”glichen Einstellungen: Sekunden
Index der aktuellen Wechselstromeinstellung: 0x0000012c
Index der aktuellen Gleichstromeinstellung: 0x0000012c

Mit powercfg -q Energieschemas Untergruppe Energieeinstellung
Code:
for /f "tokens=5 delims=: " %i in ('powercfg -q 381b4222-f694-41f0-9685-ff5bb260df2e 7516b95f-f776-4464-8c53-06167f40cc99 3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e^|find "Wechselstromeinstellung"') do echo %i
bekommst du den Zeitwert raus und per powercfg -getActiveScheme bekommst du das aktuelle Energieschema, den Rest kannst du dir dann zusammenbauen :)

mfg
 
Hi,
hier ein Anfangsansatz von mir ;)

Code:
@echo off & title %~n0
cls

for /f "tokens=4 delims= " %%i IN ('powercfg -q ^|find "GUID des Energieschemas:"') do set ersteStl=%%i
for /f "tokens=4 delims= " %%i IN ('powercfg -q ^|find "(Bildschirm)"') do set zweiteStl=%%i 
for /f "tokens=4 delims= " %%i IN ('powercfg -q ^|find "(Bildschirm ausschalten nach)"') do set dritteStl=%%i 
echo Energieschemas: %ersteStl%
echo Untergruppe: %zweiteStl%
echo Energieeinstellung: %dritteStl%
echo.

for /f "tokens=5 delims=: " %%i in ('powercfg -q %ersteStl% %zweiteStl% %dritteStl% ^|find "Wechselstromeinstellung"') do set wert=%%i & echo Wert: %%i
if %wert% EQU 0x0000003c echo Steht auf 1 Min
if %wert% EQU 0x000000b4 echo Steht auf 3 Min
if %wert% EQU 0x0000012c echo Steht auf 5 Min
if %wert% EQU 0x00000258 echo Steht auf 10 Min
if %wert% EQU 0x000004b0 echo Steht auf 20 Min

pause>nul
 
Welches Betriebssystem? Bei mir mit Windows 8.1 funktioniert es tadellos.
 
ibm9001 schrieb:
1) Unter Windows 7 werden keine .bat Dateien angelegt sondern .cmd Dateien.

bullshit.

Ich verstehe das Problem nicht so ganz, für mich gibt es 3 Zustände:

1. komplett aus -> shutdown -f -s -t 0
2. Ruhezustand -> vorausgesetzt powercfg -h on
%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState
3. Standby (für mich das gleiche wie energiesparen) -> vorausgesetzt powercfg -h off
%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState

Wenn du auf den ruhezustand verzichten kannst, würde ich einmalig den befehl "powercfg -h off" ausführen und eine batchdatei erstellen mit folgendem Inhalt:
%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState

funktioniert unter windows 7 ohne probleme.

Quelle

edit:
gerade gemerkt das sich hier die Fragestellung gegenüber dem Eingangspost geändert hat.
Ergänzung ()

bei deinen batchdateien müssen die = zeichen weg
also entsprechend:
C:\Windows\System32\powercfg -change -monitor-timeout-ac 20
und:
C:\Windows\System32\powercfg -change -monitor-timeout-ac 1
 
Zuletzt bearbeitet:
Zu der .bat aus Post #10: Erst ab Windows 8 kann der dritte Paramter (also die GUID der Energieeinstellung) in powercfg angegeben werden. Das führt auf jeden Fall zu einem Fehler.
Und die GUIDs für die Untergruppe Bildschirm und die Einstellung Bildschirm abschalten nach braucht man sich auch nicht extra raussuchen, die sind fest. Einzig die GUID des Energieschemas kann sich ändern, wenn jemand mal nicht Ausbalanciert aktiviert hat.
 
simpsonsfan schrieb:
Zu der .bat aus Post #10: Erst ab Windows 8 kann der dritte Paramter (also die GUID der Energieeinstellung) in powercfg angegeben werden. Das führt auf jeden Fall zu einem Fehler.
Und die GUIDs für die Untergruppe Bildschirm und die Einstellung Bildschirm abschalten nach braucht man sich auch nicht extra raussuchen, die sind fest. Einzig die GUID des Energieschemas kann sich ändern, wenn jemand mal nicht Ausbalanciert aktiviert hat.
Danke für die Info :)

Nachtrag, bei mir in WM läuft das Script (Post #10) unter Windows 7 Pro, außer Zeile 12 + die zugehörigen.
win7_vm.jpg
 
Zuletzt bearbeitet:
Dann war ich wohl zu voreilig in meinen Schlüssen, jedenfalls konnte ich unter einem Win7 (ich glaube Home) und einem Vista Ultimate Rechner keine 3. GUID angeben, unter dem Win8 Rechner schon. Auf jeden Fall wurde powercfg etwas geändert, da auch die Ausgabe anders formatiert ist.

Muss das nochmal genauer angucken.
Ergänzung ()

Also, noch einmal getestet. Unter Win7 Home Premium gibt das powercfg in Zeile 12
Ungültige Parameter -- Geben Sie "/?" ein, um die Hilfe anzuzeigen.
aus. Liegt daran, dass man dort nur zwei GUIDs angeben kann. Und im Anschluss gibt Zeile 13 dann natürlich den Syntaxfehler aus, da wert nicht gesetzt wurde.
"0x0000003c" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Ergänzung ()

Falls Bildschirm ausschalten nach unter Win7 immer die zweite Einstellung der Untergruppe Bildschirm ist, kann man einfach den dritten Parameter bei powercfg weglassen und dann nur die zweite Zeile der Ausgabe nehmen, also sowas in der Art:
Code:
@echo off & title %~n0
cls
setlocal enabledelayedexpansion
 
for /f "tokens=4 delims= " %%i IN ('powercfg -q ^|find "GUID des Energieschemas:"') do set ersteStl=%%i
for /f "tokens=4 delims= " %%i IN ('powercfg -q ^|find "(Bildschirm)"') do set zweiteStl=%%i
echo Energieschemas: %ersteStl%
echo Untergruppe: %zweiteStl%
echo.

set j=0
for /f "tokens=5 delims=: " %%i in ('powercfg -q %ersteStl% %zweiteStl% ^|find "Wechselstromeinstellung"') do (
set /a j=!j!+1
if !j!==2 set wert=%%i & echo Wert: %%i
)
set /a min=%wert%/60
echo Steht auf %min% Min
 
Zuletzt bearbeitet: (Wenn wir schon set haben, können wir das ja auch für die Umrechnug nutzen)
Hallo, ich habe nach heutigem CPU wechsel das Problem das der Standby Modus (Energie sparen) verschwunden ist.
Sowohl in der Energiesparverwaltung unter Systemsteuerung als auch unter Start Herunterfahren.
Es wird lediglich der Ruhezustand angezeigt,Ich möchte gern das die Sitzung im Ramspeicher gehalten wird und nicht auf die SSD geschrieben wird.
Hatte nun schon einige Befehle unter CMD probiert,nichts brachte den Energie spar Modus zurück.

Hat jemand eine Idee?
 
Zurück
Oben