l4a-thompson
Goto Top

shutdown über batch datei und cls kurzzeitig auser kraft setzen

also ich habe eine batch datei mit mehreren auswahl möglichkeiten damit das menü immer klar aussieht und nicht von befehlen überschwemmt wir benutze ich den befehl CLS

und ich wollte es nicht über SHUTDOWN -i machen wäre ja zu einfach *g*

ich möchte jetzt in die batch datei einen shutdown befehl einbinden

if %AuswahlEingabe% equ h goto Herunterfahrer

:Herunterfahrer
echo Bitte die Sekunden bis zum Herunterfahren eingeben! (1h=3600sek)
goto shutdown

:shutdown
shutdown -s -t <-- soll frei wählbar sein

so ich möchte nun den satz hinter echo sichtbar haben leider verschwindet er gleich wieder und springt ja zu shutdown

des weiteren möchte ich die möglichkeit haben eine zeit manuell einzugeben.
muß man da ernsthaft für jede sekunde ein weiteres goto shutdown zu sekunde so und so machen oder gibt es andere möglichkeiten

gibt es denn die möglichkeit die schrift einer batch datei zu verändern wie zum beispiel dick dünn unterstrichen oder vieleicht sogar farbe???

Content-ID: 13847

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

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

David-
David- 01.08.2005 um 12:44:44 Uhr
Goto Top
Also ich kann dir nicht alles beantworten, aber ersteinmal zur Schrift: Die kannst du leider in keinster weise verändern.

Der Text bleibt nur kurz stehen wenn du ne pause hinmachst.
also

:Herunterfahrer
echo Bitte die Sekunden bis zum Herunterfahren eingeben! (1h=3600sek)
pause
goto shutdown

dann wirst du aber aufgefordert einmal zu klicken um fortzufahren.


Das mit der zeit weiß ich nicht :/ sry....

Mit freundlichem Gruß
David Rosehnal
L4a-Thompson
L4a-Thompson 01.08.2005 um 13:01:25 Uhr
Goto Top
das mit der pause hab ich dann auch mal eingebaut gehabt aber das ist halt nicht ganz das ware.
was hat es denn mit setlocal und endlocal auf sich könnte das gehen?
Biber
Biber 01.08.2005 um 14:49:26 Uhr
Goto Top
Moin L4a-Thompson,
Der Set-Befehl könnte helfen - schau mal mit "Set /?" am Dos-Prompt.

in dem Batch...
...
:: Default setzen für Shutdown-Time 300Sec/5Min...
Set STime=300
Menu anzeigen etc...
if %AuswahlEingabe% equ h goto Herunterfahrer
:Herunterfahrer
Set /P STime="Bitte die Sekunden bis zum Herunterfahren eingeben! (1h=3600sek) :"
::--- goto shutdown brauchst du nicht, ist ohnehin der nächste Befehl

:shutdown
shutdown -s -t %STime% <-- soll frei wählbar sein
...
ende Ausschnitt aus dem Batch----

Hope It Helps
Frank / der Biber aus Bremen
L4a-Thompson
L4a-Thompson 01.08.2005 um 16:31:52 Uhr
Goto Top
ich danke dir Biber
das geht wunder bar

genauso hatte ich es mir vorgestellt
superboh
superboh 02.08.2005 um 00:37:58 Uhr
Goto Top
Die Schriftfarbe kannst du mit dem Befehl "color" einstellen. Gib mal in der Eingabeaufforderung "color /?" ein.

Eine Pause für x Sekunden kannst Du entweder mit einem Sleep-Befehl machen oder aber selber mit einem Ping basteln:

ping 127.0.0.1 -n 11 >NUL

Dabei pingt sich der Rechner n-mal selber an (127.0.0.1 ; localhost). Damit keine Ausgabe des Ping-Befehls erfolgt wird diese ins Nirwana umgeleitet (>NUL). Bei n (Anzahl der Pings) musst Du immer eine mehr nehmen als Du Sekunden willst.
Biber
Biber 02.08.2005 um 10:27:18 Uhr
Goto Top
Moin L4a-Thompson,

noch ein paar Anmerkungen zu der Batch-Skizze von gestern.. als Tipps für diesen und Deine nächsten Batches... *fg

1) Früh angewöhnen: Statt "if %AuswahlEingabe% equ h ...." besser auf beiden Seiten des Operanten die Variablen/Werte einklammern o.ä, also z.B.
if "%AuswahlEingabe%" equ "h" goto ... oder
if (%AuswahlEingabe%) equ (h) goto... oder
if _%AuswahlEingabe%_ equ _h_ goto...
sonst bekommst Du einen Syntaxfehler, falls die Variable "AuswahlEingabe" leer ist. Denn dann würde Zeile aufgelöst zu "if equ h..." und das liefert das beschriebene "TILT!"
Außerdem kannst Du dann auf leer vergleichen:
if (%AuswahlEingabe%) equ () Set AuswahlEingabe=%SinnvollenDefault%

2) Immer das Schlechteste von Anwendern erwarten... wenn du zehn Benutzer nach einem Sekundenwert fragst, tippen mindestens drei davon Werte wie "-12" , "1000000", "egal" , &ltESC&gt oder "Ägypten" ein, nur um zu sehen, ob so etwas abgefangen wird (mach ich auch so *g)

Deshalb besser nach der Zeile "Set /P STime..." noch (minimal) folgendes:

Set /a STime=%STime+0 ...... wenn keine Ziffern eingegeben wurden, kommt 0 heraus, sonst %STime%
IF (%STime%)==(0) Set STime=300 .... bei Unsinnseingaben Default setzen

3) Nix machen, was Benutzer überfordern könnte... die rufen sonst nachts bei Dir an, um sich zu beschweren. Nicht die Benutzer die Minuten in Sekunden umrechnen lassen... dass kann nur schiefgehen. Frag nach Minuten in der "Set /P "-Zeile und rechne selbst um (nach Abfrage x Minuten ... "set /a STime=%STime% * 60 ")

Hoffe, es regt zum Weiterprobieren an

Biber
L4a-Thompson
L4a-Thompson 02.08.2005 um 12:32:55 Uhr
Goto Top
@echo off
Title Programm Center v3.0 Produced by Thompson
setlocal
:menue
cls
color A9 REM grüner Hintergrund / blaue Schrift
echo Teamspeak Server
echo ================
echo LAN-4-ALL Server (Channel Wahl)
echo.
echo 1 Ruheraum
echo 2 Battlefield 2
echo 3 GOF - LTP
echo 4 Laberecke
echo 5 Eigener Testserver (Eingang)
echo.
echo --------------------------------------------------------------------------------
echo Weitere Optionen ausfuehren
echo ===========================
echo.
echo Antivir Guard Aktivieren? (j)a
echo Manuelle Befehlseingabe (cmd)
echo PC (h)erunterfahren / Herunterfahren (a)bbrechen / (n)eu starten
echo.
echo =======================
echo PROGRAMM VERLASSEN: 0
echo =======================
echo.
echo.
set /p AuswahlEingabe=Aktion Auswaehlen:
if %AuswahlEingabe% equ 1 goto Ruheraum
if %AuswahlEingabe% equ 2 goto BF2
if %AuswahlEingabe% equ 3 goto GOF - LTP
if %AuswahlEingabe% equ 4 goto Laberecke
if %AuswahlEingabe% equ 0 goto EXIT


if %AuswahlEingabe% equ 5 goto Eigener


if %AuswahlEingabe% equ j goto Antivir
if %AuswahlEingabe% equ h goto Herunterfahrer
if %AuswahlEingabe% equ a goto abbrechen
if %AuswahlEingabe% equ n goto neustart
if %AuswahlEingabe% equ cmd goto CMD


goto menue
:Ruheraum
start D:\teamspeak2_RC2\TeamSpeak.exe teamspeak:server ip/channel=Ruheraum?nickname=xxxxxxxx?LoginName=xxxxxxxx?password=xxxxxxxx
exit


goto menue
:BF2
start D:\teamspeak2_RC2\TeamSpeak.exe teamspeak:
server ip/channel=Battlefield 2?nickname=xxxxxxxx?LoginName=xxxxxxxx?password=xxxxxxxx
exit


goto menue
:GOF - LTP
start D:\teamspeak2_RC2\TeamSpeak.exe teamspeak:server ip/channel=GOF - LTP?nickname=xxxxxxxxn?LoginName=xxxxxxxx?password=xxxxxxxx
exit


goto menue
:Laberecke
start D:\teamspeak2_RC2\TeamSpeak.exe teamspeak:
server ip/channel=Laberecke?nickname=xxxxxxxx?LoginName=xxxxxxxx?password=xxxxxxxx
exit


goto menue
:Eigener
start D:\teamspeak2_RC2\TeamSpeak.exe teamspeak://server ip/channel=Default?nickname=xxxxxxxx
exit


goto menue
:Antivir
echo Dieser vorgang dauert einige Sekunden
net stop antivirservice
net start antivirservice
goto menue


goto menue
:Herunterfahrer
echo.
echo Doch nicht Herunterfahren druecke ohne zahl ENTER!!!
echo.
Set /P STime=In wieviel Minuten soll der Pc Herunterfahren?
Set /a STime=%STime+0
IF (%STime%)==(0) goto doch
goto shutdown


goto menue
:doch
echo Soll pc nun Herunterfahren? (d)och jetzt. Hm doch lieber zum (m)enue
echo.
Set /P AuswahlEingabe="Wohin solls nun Gehen?"
if "%AuswahlEingabe%" equ "d" goto Herunterfahrer
if "%AuswahlEingabe%" equ "m" goto menue


goto menue
:shutdown
set /a STime=%STime% * 60
shutdown -s -t %STime%


goto menue
:abbrechen
shutdown -a


goto menue
:neustart
shutdown -r -t 00


goto menue
:CMD
start Title Manuelle Befehlseingabe


goto menue
:EXIT
end
endlocal

so meine erste batch datei ist fertig falls ihr noch anregungen habt fänd ich klasse mit dem set befehl allerdings fehlt mir der zusammen hang wie und wo ich den einsetzen kann
das mit der farbe konnte ich leider nur zum teil umsetzen da es nicht wie gewollt zeilen weise mit der schrift farbe geht sonder nur komplett

hab es so gemacht das wenn keine zahl eingegeben wird man noch einmal gefragt wir was man tun möchte da 5 stunden doch ziemlich lange waren und wie gesagt man will die leute ja nicht überfordern *g*

auf jeden fall recht herzlichen dank an alle für eure schnelle hilfe
Biber
Biber 02.08.2005 um 14:19:33 Uhr
Goto Top
..jepp, L4a-Thompson,

für den ersten Versuch...gut gemacht.

Noch zwei (konstruktive) Meckereien:

1) zwei aufeinanderfolgende Zeilen mit "goto hier" .."goto da" ... die zweite kann nie erreicht werden.
2) wo jetzt "exit" als Befehl steht.... lieber "goto exit" ... niemals direkt aus irgendeiner Schleife/Verzweigung so brutal ganz raus springen. Das kannst Du Dir in vielen Programmsprachen nicht erlauben...

Schönen Tag noch
Biber
Biber
Biber 02.08.2005 um 19:32:45 Uhr
Goto Top
...einen hab ich noch, Thompson,

Es ist in Batchdateien "eigentlich" nicht möglich, nach einer Anweisungszeile einen Kommentar anzugeben. Deshalb geht auch die Zeile 6 "color A9 REM grüner Hintergrund / blaue Schrift " in die Grütze und wird gar nicht ausgeführt.

Richtiger wäre (dokumentierte Variante): es in zwei Zeilen schreiben:
...
color A9
REM grüner Hintergrund / blaue Schrift
...
Lesbarer (für mich) ist manchmal doch EINE Zeile statt zwei:
(color A9) && (REM grüner Hintergrund / blaue Schrift )
...
wird vom CMD-Interpreter wie folgt gelesen... mach Anweisung in erster Klammer, wenn das klappt (&& = logische UND-Verknüpfung), dann auch die nächste Anweisung.

Und die color-Anweisung kannst Du mit "color" (ohne Parameter) wieder auf Standard zurücksetzen. Solltest du beim kontrollierten Beenden machen ( als nach der Sprungmarke :exit ganz unten)