shutdown mit j/n abfrage?

5 Antworten

Minimalistisch:

Mini_demo.cmd

@echo off
choice /n /c NH /m "[N]eustart  [H]erunterfahren
if %Errorlevel% equ 1 (shutdown /r /t 0 /f)
if %Errorlevel% equ 2 (shutdown /s /t 0 /f)

Etwas auf gehübscht:

Comfort_Demo.cmd

@echo off
chcp 65001 >nul
mode 40,4
color 1e

set "defaultTimer=5"   &rem Zeit (Sekunden), nach welcher die Defaultoption ausgeführt wird
set "defaultOption=H"  &rem  Standardaktion weche ausgeführt wird, wenn innerhalb  der gegebenen  zeit keine  Wahl per Taste getroffen  wird

rem auswahlmenü
echo [N]eustart   [H]erunterfahren
echo [A]bbrechen
choice /n /c NHA /t %defaultTimer% /d %defaultOption% >nul
if %Errorlevel% equ 1 ( 
    set "ShutdownParams=/r /t 0 /f"
    set "Actiontext=neustarten"
    goto :confirm 
)
if %Errorlevel% equ 2 ( 
    set "ShutdownParams=/s /t 0 /f"
    set "Actiontext=herunterfahren"
    goto :confirm 
)
if %Errorlevel% equ 3 (exit /b)  &rem bei Abbruch Batch beenden...


:confirm
color 4e
cls
choice /m "Wirklich %Actiontext%"
if %Errorlevel% equ 1 (shutdown %ShutdownParams%)

mit einem echten GUI als Powershell-Batch-Hybrid:

Posh-Batch_demo.cmd

<# : Batch Abschnitt Zeile  nicht ändern
start "" /min powershell -WindowStyle Hidden -Command "&([Scriptblock]::Create((gc '%~f0' -enc UTF8 -raw )))"
exit /b
: Ende Batch Zeile nicht ändern #>


using namespace System.Windows.Forms
Add-Type -AssemblyName System.Windows.Forms


$Form = [Form]@{
    Text = 'Wähle'
    Size = '280,130'
    TopMost = $True
    StartPosition = 'CenterScreen'
    #etwas  Spielerei:
    #um den Hintergrund unsichtbar zu machen entferne  die Rauten am  begin der fogenden 3 Zeilen
#    FormBorderStyle = 0  #Keine Titelleiste
#    BackColor = 'Fuchsia'       #Hintergund  auf seltene Farbe
#    TransparencyKey = 'Fuchsia' #macht den Hintergrund (Farbe Fuchsia) unsichtbar
}


[Button]@{
    Location  = '10,10'
    Size      = '250,20'
    Text      = 'Herunterfahren'
    BackColor = 'Control'
}|%{
    $Form.Controls.Add($_)
    $_.Add_Click({ #was  beim Buttonclick passeieren soll...
        $Answer = [MessageBox]::Show('Bist  Du  sichere?', '', 'YesNo', 'Question')
        if ($Answer -eq 'Yes') {Stop-Computer -Force}
        else {$Form.Close()}
    })
}

[Button]@{
    Location  = '10,40'
    Size      = '250,20'
    Text      = 'Neustart'
    BackColor = 'Control'
}|%{
    $Form.Controls.Add($_)
    $_.Add_Click({ #was  beim Buttonclick passeieren soll...
        $Answer = [MessageBox]::Show('Bist  Du  sichere?', '', 'YesNo', 'Question')
        if ($Answer -eq 'Yes') {Restart-Computer -Force}
        else {$Form.Close()}
    })
}

$Form.ShowDialog()

Kannst du dir fix mit Chat GPT entwickeln lassen. Das sollte eigentlich nur 2-4 Zeilen Bat Code sein. 😇

Würde aber anstelle eines .bat vielleicht lieber Powershell nutzen, also .ps1


Erzesel  22.08.2024, 21:29
@echo off
choice /n /c NH /m "[N]eustart  [H]erunterfahren
if %Errorlevel% equ 1 (shutdown /r /t 0 /f)
if %Errorlevel% equ 2 (shutdown /s /t 0 /f)

Allerdings haben wir da noch kein (J/N)!

Dafür braucht man doch keine KI 🤣 Habt ihr keinen Kopf mehr zum selbst denken?

In Sachen Powershell gebe ich Dir recht, Allerdings ist der Aufruf von Powershellscripten über das "rechtsklick-Menü" etwas hakelig.

Mit etwas Trickserei kann man allerdings über meinen Batch-stub ein Powershellscript in einer .cmd-Datei unterbringen. dann genügt Doppelklick.

kernel0verflow  22.08.2024, 21:41
@Erzesel

Nein, ich brauche als Programmierer der sich täglich damit beschäftigt auch keine. Aber ich bin davon ausgegangen, das der/die Fragestellerin ein DAU ist und keine Ahnung von der Materie hat. Sonst wäre die Frage ja komplett obsolet gewesen. Deine Antwort sieht aber gut aus! 😇

Erzesel  22.08.2024, 22:01
@kernel0verflow

da hättest Du dem Fragesteller die 4 Zeilen auch gleich (ohne den Umweg über den unzuverlässigen ChatGPT) überlasen können. 😏🙄

Was macht hinterlässt Du für einen Eindruck, wenn Du (als jemand der es Wissen müsste) auf einen KI-Bot verweist ? Schwache Kür😣

kernel0verflow  22.08.2024, 22:26
@Erzesel

Stimmt allerdings da gebe ich dir recht 😅

Manchmal finde ich es aber auch sinnvoll wenn ich Leuten einen Anstoß gebe selbst auf die Lösung zu kommen und so ihre Problemlösungsstrategie zu verbessern. Und ich war am iPhone beim beantworten, da ist es schlecht mit Code schreiben und ggf. nochmal testen ob ich keinen Bockmist geschrieben habe. Gehe immer gern auf Nummer sicher bevor ich Leuten ein Random Skript empfehle. ✌️

Erzesel  23.08.2024, 07:03
@kernel0verflow

Unter dieser Voraussetzung sei Dir verziehen.

Ich lasse auch nichts raus ohne zu testen.

Ich würde einfach die gewünschte Aktion über eine Variable festlegen. Als Code sage das dann so aus:

@echo off
set /p oper=was soll denn passieren? 
shutdown /%oper% /f /t 02
exit

Das gibt's natürlich keine Eingabefilterung, aber durch das eingeben von r bekommst du einen restart, s macht einen shutdown, h bringt den PC in den Ruhezustand, ...

Mit PowerShell kann man GUIs entwickeln. Und da die Powershell auf das System zugreifen kann, ist dein Vorhaben einfach zu realisieren.

Vielen Dan k für eure Hilfe. Probiere aus. Werde ggf. nochmal. Vielen Dank nochmal.