Batch ProcThrottleMax & For /f

Manaplayer

Cadet 4th Year
Registriert
Juni 2017
Beiträge
105
Hallöchen Leute.
Mein Script ist soweit fertig und funktioniert auch (Nach 6h dauerhafter Quälerei ^^)
Nur eins hab ich irgendwie nicht verstanden -Hier erstmal das Script:
@ECHO off
chcp 1252
FOR /f "skip=10 tokens=5,6" %%i IN ('POWERCFG /q d1e47c47-4785-4532-b9b7-7d0c65fc74ee 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec') DO IF %%i==0x00000032 (POWERCFG /setacvalueindex d1e47c47-4785-4532-b9b7-7d0c65fc74ee 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec 100
POWERCFG /setdcvalueindex d1e47c47-4785-4532-b9b7-7d0c65fc74ee 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec 100
powercfg /setactive SCHEME_CURRENT
GOTO Ende) else (POWERCFG /setacvalueindex d1e47c47-4785-4532-b9b7-7d0c65fc74ee 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec 50
POWERCFG /setdcvalueindex d1e47c47-4785-4532-b9b7-7d0c65fc74ee 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec 50
powercfg /setactive SCHEME_CURRENT
GOTO Ende)
:Ende
FOR /f "skip=10 tokens=5,6" %%i IN ('POWERCFG /q d1e47c47-4785-4532-b9b7-7d0c65fc74ee 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec') DO IF %%i==0x00000032 (ECHO "Prozessor läuft jetzt mit 50 Prozent Power"
TIMEOUT /t 3) else (ECHO "Prozessor läuft jetzt mit 100 Prozent Power"
TIMEOUT /t 3)

Wenn ich den PowerCfg /q auslesen lasse, entsteht an den letzten beiden Zeilen ja der Wert von im Wechselstrom und Gleichstrom.
Mit dem For /f skip hab ich ja die irrelevanten Zeilen überhalb ausgelassen - Nun kommts:
Wie kann ich es schaffen NUR die Zeile mit dem Wechselstrom, also die vorletzte auszulesen? Nirgendswo hab ich was sinnvolles darüber gefunden. Das Script funktioniert ja deshalb, da Wechselstrom und Gleichstrom den selben Wert wechseln. Mein Ziel ist es nur den Wert von Wechselstrom zu ändern.

Mal schauen ob ihr was verstehbares darüber wisst :-)
 
Könntest du das ganze noch einmal mit /code tag, ordentlicher Formatierung und ein paar comments posten, bzw deinen Post editieren?
Bisher werde ich eher wenig schlau, was du da eigentlich auslesen und machen willst.

Also so in der Art:

Code:
    //recursion stop
    if (level == depth)
        return;

    //no endless loop pls
    if (level > 0 && (!strcmp(dir, ".") || !strcmp(dir, "..")))
        return;

    //open given dir
    DIR *directory;
    if (!(directory = opendir(dir)))
    {
        perror("opendir");
        exit(EXIT_FAILURE);
    }
Ergänzung ()

So habe das ganze mal in ein powershell Script konvertiert, da die Arbeit mit Batch eine Zumutung ist.
Das sollte dein Problem lösen und lässt sich bei Problemen mit Visual Studio Code auch sehr schön debuggen.

Code:
$CMD = 'powercfg.exe';
$query = '-q';
$id = 'd1e47c47-4785-4532-b9b7-7d0c65fc74ee 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec';
$setAC = '/setacvalueindex';
$setDC = '/setdcvalueindex';
$setActive = '/setactive SCHEME_CURRENT';
$100 = '100';
$50 = '50';

#get desired cfg-part
$powerCfg = & $CMD $query $id;

#check line 10
if ($line[9] -match "0x00000032") {
    & $CMD $setAC $id $100;
    & $CMD $setDC $id $100
    & $CMD $setActive;
}
else {
    & $CMD $setAC $id $50;
    & $CMD $setDC $id $50
    & $CMD $setActive;
}

$powerCfg = & $CMD $query $id;

#write change result
if ($line[9] -match "0x00000032") {
    Write-Output "Prozessor läuft jetzt mit 50 Prozent Power";
}
else {
    Write-Output "Prozessor läuft jetzt mit 50 Prozent Power";
}

edit: Zeile auf die richtige geändert.
 
Zuletzt bearbeitet:
Wenn ich den Befehl "POWERCFG /q d1e47c47-4785-4532-b9b7-7d0c65fc74ee 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec" eingebe, bekomme ich die aktuellen Werte der Energieeinstellung vom Prozessor:

GUID des Energieschemas: d1e47c47-4785-4532-b9b7-7d0c65fc74ee (Energieeinstellungen für P7618)
GUID der Untergruppe: 54533251-82be-4824-96c1-47b60b740d00 (Prozessorenergieverwaltung)
GUID-Alias: SUB_PROCESSOR
GUID der Energieeinstellung: bc5038f7-23e0-4960-96da-33abaf5935ec (Maximaler Leistungszustand des Prozessors)
GUID-Alias: PROCTHROTTLEMAX
Minimum der möglichen Einstellung: 0x00000000
Maximum der möglichen Einstellung: 0x00000064
Schrittweise Erhöhung der möglichen Einstellungen: 0x00000001
Einheiten der möglichen Einstellungen: %
Index der aktuellen Wechselstromeinstellung: 0x00000032
Index der aktuellen Gleichstromeinstellung: 0x00000032

Um jetzt beim einfachen draufklicken vom Script die Einstellung immer von 50% und 100% zu ändern, muss ja der aktuelle Wert ausgelesen werden.
Dazu lasse ich die ersten 9 Zeilen schonmal aus. Dann bleiben nur noch die Zeilen
Index der aktuellen Wechselstromeinstellung: 0x00000032
Index der aktuellen Gleichstromeinstellung: 0x00000032
Meine Frage ist, wie komme ich dazu, dass nur noch der Wert der ersten Zeile, also vom Wechselstrom ausgelesen wird? Diesen Wert will ich dann verwenden und ändern, sodass der Gleichstrom-Wert immer gleich bleibt.
 
Diesen Wert will ich dann verwenden und ändern, sodass der Gleichstrom-Wert immer gleich bleibt.
Warum änderst du dann aber beide Werte?

Meine Frage ist, wie komme ich dazu, dass nur noch der Wert der ersten Zeile, also vom Wechselstrom ausgelesen wird?
Deshalb Powershell, da kannst du direkt auf die gewünschte Zeile zugreifen und musst nicht mit nicht mehr ganz zeitgemäßen Batch-Methoden arbeiten.
 
Ich will ja nicht beide Werte ändern - Das war nur die Lösung bisher, da immer der Wert der letzten Zeile ausliest und der muss immer anders sein, sonst würde sich ja nichts umstellen.
 
Zurück
Oben