Was ist an der Batch faul?

3 Antworten

22:30:00.00 wird nie kommen .

gib mal echo %time% ein. Ausgabe: 0:00:00,00 ja da ist ein Komma und kein Punkt!

Zudem sind die Stellen nach dem Komma Millisekunden in Anbetracht des Umstandes , das ein Schleifendurchlauf 2..15 Millisekunden dauern kann ist nich sicher, das man jemals ,00 am Ende erwischt.

Mit %time: =0% das führende Leerzeichen bei 1stelligen Sunden durch eine 0 zu ersetzen ist erstmal keine schlechte Idee.👍👍👍

Viel wichtiger wäre as jedoch die Millisekunden loszuwerden und am Besten auch die Sekunden. (dann muss Deine Schleife sich auch nicht ein Stück vom Prozessor und der Festplattenperformace "abbeißen".

@echo off
:TimeLoop
set "now=%time: =0%"
  rem alles  hinter der 5.Position entfernen (Stunden:Minuten reichen)
set "now=%now:~0,5%"
echo %now%
if "%now%"=="22:30" (goto :action)
  rem mache eine Pause von 10 Sekunden (man hat dann eine Ungenauigkeit von Maximal 9 Sekunden)
  rem natürlich kannst Du auch nur 1 Sekunde  warten, dann ist der Fehler max. 999 Millisekunden
  rem das  geht  aber zu lasten Deiner Festplatte/SSD
timeout 10 >nul
goto :Timeloop

:action
echo es ist %time:~0,8%
echo Ich mache jetz irgendwas
  rem jetzt kommt es: Du willst ja ohnehin erst wieder am nächsten Tag etwas tun,
  rem also Warte eienen Tag (86400Sekunden)-11 Sekunden
echo mache erst in 24 Stunden weiter...
timeout 86389 >nul
  rem ...dann "kurbelt" Deine Batchschleife ab dem 1. Treffer maximal 1mal pro Tag (und  nomalisiert nach und nach auch  noch die "Ungenauigkiet")
goto :Timeloop
pause

Warum "belastet eine Batch die Festplatte? (mal abgesehen vom LeseCach...).

Cmd.exe lädt immer nur eine Zeile oder einen Klammerblock aus der Batchdatei und führt dies aus.

Noch schlimmer sind Rückwärts gerichtete Gotos. Dann werden alle Zeilen bis zum Ende der Batch auf das :Label "abgeklappert" und wenn bis dort nichts gefunden wird, wird die Suche am Dateibeginn fortgesetzt.

Auf heutigen schnellen Systemen kaum merklich, war das in Zeiten von Floppydisks eine wahre Tortuor. Wenn du keine Timeoutpause einlegst, wird das ganze Prozetere einige 100mal pro Sekunde widerholt.🤪💩

Das geht ans Material (...25.920.000 Durchläufe/Tag! )

sowas macht man mal für einege Sekunden , aber nicht Tagelang...

Aber eigentlich ist das ganze Ansinnen Faul... und gruselig😱🥶

Du willst eine schleife laufen lassen und das Fenster muss offen bleiben alles hässlich, dabei hat Windows so einen schönen Aufgabenplaner.

Hier hatte ich alles recht passabel erklär, wie man diesen aus einer Batch heraus programmiert. https://www.gutefrage.net/frage/computer-zur-bestimmten-uhrzeit-runterfahren#answer-376219999

Ein geplanter shutdown. ...aber natürlich ist es total egal, was Du tun lässt. Wenn Du das aufwecken nicht in den Energieoptionen deaktiviert hast. wird sich der Rechner sogar zur gewünschten Zeit selbst starten!

@echo off
chcp 65001 >nul
if "%~1" neq "" goto %~1
  rem bei normalem Start (per Mausklick etc.) wird  dies ausgeführt:
  rem %~f0 = Variable: Diese Batch .mit dem Parameter :action ab "Heute" täglich 22:30 ausführen
schtasks /create /tn "Meine Batch action" /tr "%~f0 :action" /sc DAILY /sd %date% /st 12:00 /f
  rem mal die Aufgabenverwaltung GUI anzeigen, damit Du siehst was passiert ist
start "" "taskschd.msc" 
pause
exit /b

:action
  rem hier  kommt rein was alles getan werden soll
echo  hallo ich  bin der Actionteil Deiner Batch und wurde automatisch gestartet
  rem kleiner Trick: 3mal piepen
echo aaax|choice /c x >nul
pause
exit /b
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
ChinaProdukt 
Fragesteller
 15.12.2020, 13:55

Danke für die ausführliche Antwort

1

Wie öffnest Du es? Doppelter Mausklick auf die Datei (im FileExplorer)?

Öffne zuerst eine cmd shell und starte das script dort. Dann siehst Du den Grund:

if %now%==22:30:00.00 (goto nee) --> funktioniert so nicht, schreib stattdessen:

if "%now%"=="22:30:00.00" (goto nee)

P.S.: Das Script ist ohnehin Müll:

  1. Keine Garantie, dass %now% jemals den Wert 22:30:00.00 hat
  2. Je nach Setiings hat %now% evtl. auch den Wert 22:30:00,00

Du musst ein pause am Ende einbauen...

Woher ich das weiß:Hobby – Linux-User
ChinaProdukt 
Fragesteller
 14.12.2020, 22:33

oh k thx

0