ingenieurs
Goto Top

Windows Aufgabenplanung schtasks mit Variablen konfigurieren (Batch)

Hallo,
ich habe in eine Batch einen Herunterfahren Mechanismus eingebaut.
Dazu habe ich für Standardmäßigen 24 Uhr Shutdown diese Code Zeile verwendet
schtasks /create /sc once /tn "Shutdown 24Uhr" /tr "shutdown -s -f" /st 23:59  

Jetzt möchte ich eine Abbruch Möglichkeit einbauen die es ermöglicht bei bedarf andere Uhrzeiten einzutragen.
Dazu habe ich das geschrieben
set UHR=
set /P UHR=Eingabe: %=%
cls
schtasks /create /sc once /tn "Shutdown %UHR%Uhr" /tr "shutdown -s -f" /st %UHR%  

Doch leider wird dies mit
"FEHLER: Ungültiger Startzeitwert" zurückgewiesen.
Hat jemand eine Lösung?

Viele Grüße
Ingenieurs

Content-Key: 378554

Url: https://administrator.de/contentid/378554

Printed on: April 24, 2024 at 17:04 o'clock

Member: em-pie
em-pie Jun 28, 2018 at 18:52:41 (UTC)
Goto Top
Moin,

Was gibt denn die Condoleezza aus, wenn du mal Zeile 4 nur als Echo ausgeben lässt?
set UHR=
set /P UHR=Eingabe: %=%
cls
Echo schtasks /create /sc once /tn "Shutdown %UHR%Uhr" /tr "shutdown -s -f" /st %UHR%  

Dann bin ich mit deinem Set / p ... %=% irritiert (kenne aber auch nicht alle cmd-Features).

Bisweilen kenne ich set /p nur wie folgt:
 
Set /p var=Eingabe:

Ändere das also mal entsprechend ab

Gruß
em-pie
Member: rubberman
rubberman Jun 28, 2018 at 19:09:15 (UTC)
Goto Top
%=% ist immer eine undefinierte Variable und expandiert demzufolge zu nix. Vermutlich soll das nur das Leerzeichen davor verdeutlichen, was aber per
set /P "UHR=Eingabe: "
sinnvoller wäre.
"Ungültiger Startzeitwert" deutet tatsächlich auf einen Fehler zwischen Stuhl und Tastatur hin.
   /ST   Startzeit    Bestimmt die Startzeit der Aufgabe.
                      Zeitformat: HH:mm (24 Stunden), z. B. steht 14:30 für
                      2:30 PM. Wenn /ST nicht angegeben ist, wird standard-
                      mäßig die aktuelle Zeit verwendet. Diese Option ist
                      erforderlich für /SC EINMAL.
Wird da ein Wert eingegeben, der nicht dem oben angeführten Format entspricht, geht's in die Hose.

Zwei Anmerkungen:
  • once ist hierzulande merkwürdig. Leider unterliegt SCHTASKS auch dem Multilingual User Interface, wo auf einem deutschen System ONCE zu EINMAL vergewaltigt werden müsste.
  • Für SHUTDOWN ist /f unwirksam, wenn nicht /t mit einem Wert größer 0 übergeben wurde.

Steffen
Member: Ingenieurs
Ingenieurs Jun 28, 2018 at 19:25:21 (UTC)
Goto Top
Zitat von @em-pie:
Bisweilen kenne ich set /p nur wie folgt:
 
> Set /p var=Eingabe:
> 

Ändere das also mal entsprechend ab

Das abändern hat Wirkung gezeigt. Nur leider habe ich jetzt das Problem das wenn z.b. 02:50 als Uhrzeit gewählt wird, gibt die Batch den Fehler aus das die Uhrzeit schon der Vergangenheit angehört und heute nicht mehr ausgeführt wird.
Gibt es eine art Prüfung die feststellt, ob die Uhrzeit noch heute eintrifft oder nicht?

Viele Grüße
Ingenieurs
Member: Ingenieurs
Ingenieurs Jun 28, 2018 updated at 20:27:29 (UTC)
Goto Top
Ich habe soweit schonmal die Prüfung ob Heute oder Morgen gemacht.
Allerdings weiß ich nicht mit welchem Parameter ich der Aufgabenplanung sagen soll ob sie es morgen oder normal heute Ausführen soll
Sonst meckert das Programm das die Uhrzeit heute nicht mehr eintreffen wird.

set UHR=
Set /p UHR=Eingabe:
set time=%time:~-11,2%:%time:~-8,2%
if %time% GEQ %UHR% ( goto HEUTE if not %time% GEQ %UHR% goto MORGEN
)

:MORGEN
schtasks /create /sc once /tn "Shutdown %UHR%Uhr" /tr "shutdown -s -f" /st %UHR%  

:HEUTE
cls
schtasks /create /sc once /tn "Shutdown %UHR%Uhr" /tr "shutdown -s -f" /st %UHR%  
Member: Ingenieurs
Ingenieurs Jun 28, 2018 at 20:53:36 (UTC)
Goto Top
So ich habs jetzt

@echo off
set UHR=
Set /p UHR=Eingabe:
set time=%time:~-11,2%:%time:~-8,2%
if %time% GEQ %UHR% goto MORGEN
if not %time% GEQ %UHR% goto HEUTE

:MORGEN
schtasks /create /sc daily /tn "Shutdown MORGEN [Uhrzeit siehe Trigger]" /tr "shutdown -s" /st %UHR%  
goto FERTIG

:HEUTE
schtasks /create /sc once /tn "Shutdown HEUTE [Uhrzeit siehe Trigger]" /tr "shutdown -s" /st %UHR%  
goto FERTIG

:FERTIG
pause

Trotzdem danke für die Tipps!
VG
Ingenieurs
Member: rubberman
Solution rubberman Jun 28, 2018 at 20:59:10 (UTC)
Goto Top
    /SD   Startdatum   Gibt das erste Datum an, an dem die Aufgabe ausgeführt
                       wird. Zeitformat: dd/mm/yyyy. Als Standardwert wird
                       das aktuelle Datum verwendet. Dies gilt nicht für
                       folgende Zeitplantypen:                        EINMAL, BEIMSTART, BEIANMELDUNG, BEILEERLAUF,
                       BEIEREIGNIS.

for /f %%i in (
  'powershell -NoProfile -Command "(Get-date).AddDays(1).ToString('dd\/MM\/yyyy')"'  
) do set "tomorrow=%%i"  
echo %tomorrow%
Steffen
Member: Ingenieurs
Ingenieurs Jun 29, 2018 at 12:56:16 (UTC)
Goto Top
set UHR=
Set /p UHR=Eingabe:
set time=%time:~-11,2%:%time:~-8,2%
cls
if %time% GEQ %UHR% goto MORGEN
if not %time% GEQ %UHR% goto HEUTE


:MORGEN
for /f %%i in (
  'powershell -NoProfile -Command "(Get-date).AddDays(1).ToString('dd\/MM\/yyyy')"'  
) do set "tomorrow=%%i"  

schtasks /create /sc once /sd %tomorrow% /tn "Shutdown\Shutdown MORGEN [Uhrzeit siehe Trigger]" /tr "shutdown -s" /st %UHR%  
goto FERTIG

:HEUTE
schtasks /create /sc once /tn "Shutdown\Shutdown HEUTE [Uhrzeit siehe Trigger]" /tr "shutdown -s" /st %UHR%  
goto FERTIG