Batch-Datei mit sichtbarem Stunden und Minuten Timer der per Tastendruck abgebrochen werden kann (zwei Routinen in einer Batch)?

ich brauche eine Batch.

Beim starten wird gefragt, in wievielen Stunden der PC in den Energiesparmodus wechseln soll.

Die VERBLEIBENDE Zeit sollte IMMER sichtbar sein und die STUNDEN /MINUTEN runterzählen.

Wenn der Timer abgelaufen ist, sollte der PC in den Energiesparmodus gehen.

Desweiteren will ich den Countdown jederzeit wieder abbrechen können um das Programm zu verlassen,

OHNE den PC in den Energiesparmodus zu versetzen..

Am besten wäre es, wenn ich beim Abbechen des Timers nur eine Taste,

zum Beispiel (X) drücken müsste, ohne enter...(Darf gerne, muss aber nicht sein).

Ich habe schon per KI versucht dies alles hinzubekommen, aber leider bleibt der Timer hängen bei der Abbrechen-Abfrage.

@echo off

mode con cols=77 lines=6

chcp 65001>nul

title Countdown zum Energiesparmodus

:start

cls

echo In wie vielen Stunden soll der PC in den Energiesparmodus wechseln?

set /p stunden=

set /a minuten=%stunden%*60

rem Energiesparoptionen auf Höchstleistung setzen

powercfg.exe /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

:countdown

cls

echo Der PC wechselt in %stunden% Stunden und %minuten% Minuten in den Energiesparmodus.

set /a minuten=%minuten%-1

if %minuten% LSS 0 (

   set /a stunden=%stunden%-1

   set /a minuten=59

)

echo.

echo Drücken Sie 'x', um den Countdown abzubrechen.

set /p eingabe=

if "%eingabe%"=="x" goto :ende

if %stunden% EQU 0 && %minuten% EQU 0 (

echo Der Countdown ist abgelaufen. Der PC wechselt in den Energiesparmodus.

rem Energiesparoptionen auf Ausbalanciert setzen

powercfg.exe /setactive 381b4222-f694-41f0-9685-ff5bb260df2e

rundll32.exe powrprof.dll,SetSuspendState Sleep

goto :ende

)

timeout /t 60 >nul

goto countdown

:ende

echo Countdown abgebrochen.

rem Energiesparoptionen auf Ausbalanciert setzen

powercfg.exe /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
bat, Batch, cmd, Batch-Datei
Wie lese ich mittels Batch-File (CMD) eine einzelne Zeile aus?

Guten Abend zusammen,

ich möchte mir eine Batch-File schreiben, mit der ich den Namen meines WLAN-Netzwerks (SSID) auslese. Dazu lasse ich mir eine Zusammenfassung der Drahtlosinformationen mittels netsh wlan show all anzeigen. Diesen umfangreichen Text filtere ich nach dem Begriff Status mittels netsh wlan show all | find /N "Status".

Das Ergebnis sind auf meinem System vier Einträge, die exemplarisch wie folgt aussehen:

[64]   Status                 : Verbunden
[79]   Status des gehosteten Netzwerks : Nicht verfügbar
[92]Status des gehosteten Netzwerks
[94]   Status                : Nicht verfügbar

Ich weiß, dass in Zeile 65 der aktive/aktuelle WLAN-Netzwerkname (SSID) hinterlegt ist. Diese sieht folgendermaßen aus:

SSID                  : FRITZ!Box 7520 SZ

In meinem Fall müsste ich den Text in Zeile 65, der nach einem Leerzeichen nach dem Doppeltpunkt beginnt, extrahieren und in einer Variablen abspeichern.

Ich weiß, dass unter der CMD-Eingabeaufforderung eine Variablenzuweisung nicht nach dem klassischen Prinzip

var = Berechnung

erfolgt, sondern stattdessen eine for-Schleife zu verwenden ist. Mein Ansatz dafür lautet

for /f %%a in ('netsh wlan show all ^|find /N "Status"') do (set "strSSID=%%a")

Jedoch müsste ich die Laufvariable %%a (?) auf 1 begrenzen, weil ich sonst den letzten Eintrag ([94]) abspeichere.

Meine Fragen lauten daher konket:

  1. Wie limitiere ich die Laufvariable einer for-Schleife?
  2. Wie lese ich dann die um eins inkremetierte Zeile aus?
  3. Wie extrahiere ich den Text dieser Zeile nach dem Doppelpunkt sowie dem einen Leerzeichen bis zur EOL und speichere diesen in einer Variable ab?

Ich glaube, dass ich der Lösung schon recht nah bin, aber hier komme ich leider nicht weiter. Ich freue mich, über jeden Hinweis und weitere Hilfe.

Viele Grüße,

Christian

bat, Batch, cmd
CMD Numerische Konstante Fehler?

Ich habe mir ein Skript geschrieben, dass jeden Tag automatisch den richtigen Bericht öffnet. Das ist alle zwei Wochen eine Nummer mehr. Hat jetzt einen Monat ohne Probleme funktioniert. Heute hat er aber den Bericht von letzer Woche geöffnet. Gestern hatte er den richtigen. Ich hoffe ihr könnt anhand des Codes und es Fehlers sagen, wo das Problem liegt. Bin Systemintegrator in der Ausbildung. Kenne mich also ein ganz kleines bisschen mit programmieren aus. Ich glaube das ist ein total dämlicher Fehler. Aber ich finde ihn nicht. In der Berufsschule lerne ich übrigens Python. Deswegen kenne ich mich mit cmd kaum aus. Brauche ich ja eigentlich auch nicht für den Berufsalltag.

Hier der Code:

echo off
set jahr=%date:~-4%
echo Heute ist der %date%


if '%jahr%'=='2020' goto 2020
echo Es gibt keinen vorgefertigten Bericht mehr
Timeout /t 20


:2020
setlocal
chcp 1252>nul


REM KalenderWoche (Mo-SO)
REM Datum
set /A d=%date:~0,2%
set /A m=%date:~3,2%
set /A y=%date:~6,4%


REM Tag des Jahres
if %m% == 1 set /A DoY=d
if %m% == 2 set /A DoY=d+31
if %m% == 3 set /A DoY=d+59
if %m% == 4 set /A DoY=d+90
if %m% == 5 set /A DoY=d+120
if %m% == 6 set /A DoY=d+151
if %m% == 7 set /A DoY=d+181
if %m% == 8 set /A DoY=d+212
if %m% == 9 set /A DoY=d+243
if %m% == 10 set /A DoY=d+273
if %m% == 11 set /A DoY=d+304
if %m% == 12 set /A DoY=d+334


REM Schaltjahr?
set /A LY=(y/4)*4
if %y% NEQ %LY% goto noLY
if %m% GTR 2 set /A DoY=DoY+1


:noLY
REM Tag der Woche (Sonntag = 0)
for /f %%g in ('wmic path win32_localtime get dayofweek^|findstr /v /r "^$"') do (set DoW=%%g)
REM (Sonntag = 7)
if %DoW% == 0 set /A DoW=7


REM KW
set /A nSd=DoY+(7-DoW)
set /A KW=nSd/7
set /A delta=nSd-(KW*7)
if %delta% GTR 3 set /A KW=KW+1


REM Ausgabe der aktuellen KW
echo Wir sind in der %KW%. Kalenderwoche


REM Nummer des Berichts errechnen und richtigen Bericht öffnen
set /A Nummer=(KW+73)/2
echo Bericht: %Nummer%.docx
echo Fenster kann geschlossen werden oder wird geschlossen wenn der Bericht geschlossen wird.
chcp 850>nul
start winword.exe "G:\DATEN\Dez1\FD102\IuK\Azubis\"Mein Name"\Berichte\2020\%Nummer%.docx"
timeout /t 20
endlocal
exit

Und die Ausgabe mit der Fehlermeldung:

Heute ist der 08.05.2020
Ungültige Zahl. Numerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
Wir sind in der 18. Kalenderwoche
Bericht: 45.docx
Fenster kann geschlossen werden oder wird geschlossen wenn der Bericht geschlossen wird.
Gewartet wird 17 Sekunden. Weiter mit beliebiger Taste...
Computer, Technik, Fehler, programmieren, bat, Batch, cmd, Technologie, Fehlermeldung, Schaltjahr, batch-trick

Meistgelesene Beiträge zum Thema Bat