Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Choice länger warten als 99 Sekunden?

Frage Entwicklung Batch & Shell

Mitglied: pbelcl

pbelcl (Level 1) - Jetzt verbinden

19.06.2009, aktualisiert 14:19 Uhr, 4530 Aufrufe, 14 Kommentare

Kann man bei Choice eine längere Wartezeit angeben als 99 Sekunden?

Hi Leute,

Ich habe mir mit CHoice eine Auswahlfrage geschrieben:

01.
%utildir%\choice /cjn /t:n,600 j=ja oder n=nein    
02.
if errorlevel 2 goto Meldung 
03.
if errorlevel 1 goto OK
Leider geht der Choice Befehl immer schon nach 60 Sekunden weiter!
Ich vermute dass Choice nur zweistellige Zahlen mit dem /t Parameter verarbeiten kann.

Ich brauche aber in meinem Script eine Zeitspanne von ca. 10 Minuten!

Kann mir jemand einen Tipp geben, ob das mit Choice überhaupt geht?
Oder gibt es vielleicht andere Programme die Eingaben in einem Batch zulassen??
Mitglied: Destry
19.06.2009 um 14:57 Uhr
Hallo pbelcl,

mit "set /p" kannst Du Eingaben vom Nutzer abfragen.
Das Programm "sleep" kann für Pausen sorgen die länger als 10 Minuten sind.

Gruß,
Destry
Bitte warten ..
Mitglied: 76109
19.06.2009 um 15:19 Uhr
Hallo pbelcl!

Eine andere Alternative zudem, was "Destry" bereits genannt hat, währe das hier:

Speichere diesen Quelltext z.B. unter wait.vbs
01.
if wscript.arguments.count > 0 Then t=wscript.arguments(0): if isnumeric(t) then wscript.sleep t * 1000
Füge in Deiner Batch diesen Befehl mit Angabe der Zeit in Sekunden ein
01.
@cscript //nologo wait.vbs 600
Gruß Dieter
Bitte warten ..
Mitglied: bastla
19.06.2009 um 15:53 Uhr
... wobei pbelcl vielleicht eher an etwas in der Art gedacht haben dürfte:
01.
@echo off & setlocal 
02.
Set Sek=600 
03.
Set Text="Entscheide Dich!" 
04.
 
05.
set F=%temp%\Frage.vbs 
06.
>%F% echo WScript.Echo WScript.CreateObject("WScript.Shell").PopUp(%Text%,%Sek%,,4) 
07.
 
08.
for /f %%i in ('cscript //nologo %F%') do set "Antwort=%%i" 
09.
if %Antwort%==6 goto :OK 
10.
if %Antwort%==-1 echo Keine Antwort ist auch eine Antwort. & goto :eof 
11.
echo Na gut, dann nicht ... 
12.
goto :eof 
13.
 
14.
:OK 
15.
echo OK
Grüße
bastla
Bitte warten ..
Mitglied: 76109
19.06.2009 um 16:43 Uhr
Hallo bastla!

Zitat von bastla:
... wobei pbelcl vielleicht eher an etwas in der Art gedacht haben dürfte:
Hmh, das könnte gut sein

Gruß Dieter
Bitte warten ..
Mitglied: pbelcl
19.06.2009 um 21:04 Uhr
Hallo bastla,

Ich habe Dein Script ausprobiert, und muss sagen, toll.
Du bringst mich immer wieder dazu zu überlegen ob ich nicht doch meine bescheidenen batch Kentnisse in ein wenig scripting Host Kenntnisse erweitern sollte

Denn das unten angeführte Batch soll mich eine wählbare Zeitspanne lang erinnern meine Tabletten zu nehmen und nach ca. 10-30 Minuten wenn niemand reagiert ein Email verschicken, welches ich dann als SMS bekomme.

01.
@echo off 
02.
cls 
03.
echo "Bitte Pulver nehmen" 
04.
echo " Zeit 10 Minuten,sonst wird ein Erinnerungsmail verschickt" 
05.
 
06.
%utildir%\choice /cjn /t:n,99 j=ja oder n=nein    
07.
if errorlevel 2 goto Meldung 
08.
if errorlevel 1 goto OK 
09.
 
10.
 
11.
:OK 
12.
echo Pulver eingenommen >>%~n0.log 
13.
goto end 
14.
 
15.
:Meldung 
16.
echo ! ! ! ! ! Pulver NICHT eingenommen, Email zur Warnung verschickt!!! >>%~n0.log 
17.
%utildir%\gbmail -to mailadresse@domain.com -h smtp.domain.com -from pulver@domain.at -s "Pulver nicht genommen" 
18.
goto end 
19.
 
20.
:end
Die Probleme die ich habe sind:

1.) die 99 Sekunden Bschränkung bei Choice
2.) das DOS Fenster meines batchbleibt nach dem Start im Hintergrund. Ich würde eine Möglichkeit suchen, dass das Fenster mit der "echo "Bitte Pulver nehmen" alle 1-2 Minuten in den Vordergrund kommt um so etwas zu nerven.
3.) Ich muss natürlich ins LOG FIle schreiben, ob und wann ich die Pulver genommen hab ...

Gibt es da eine einfache Möglichkeit mit scripting Host, die nicht zu viel programmieraufwand ist?
Ich denke dass es mit scripting Host Bordmitteln ein 3-4 Zeiler wird, das zu machen, oder??
Wenn das wahr ist brauch ich eigenlich die Batch Datei nimmer

Welche Literatur würdest Du mir empfehlen, wenn ich wirklich anfangen möchte etwas zu scripten?
Gibt's da was für Einsteiger, behinnend mit "hello World" oder so ??
Bitte warten ..
Mitglied: pbelcl
19.06.2009 um 21:11 Uhr
Zitat von 76109:
Füge in Deiner Batch diesen Befehl mit Angabe der Zeit in
Sekunden ein
01.
> @cscript //nologo wait.vbs 600 
02.
> 
Danke DIeter für diesen Tipp. Ich habs nicht genau angesehen, aber so wie es aussieht kann man während der Wartezeit NICHT JA oder NEIN tippen. Wenn das stimmt dann ist das nicht optimal, denn ich muss ja während dieser Zeit die Möglichkeit haben Ja oder NEIN zu wählen.

Ich habe mein KOMPLETTES Batch gepostet dann ist es nicht so aus dem Zusammenhang gerissen
Bitte warten ..
Mitglied: pbelcl
19.06.2009 um 21:12 Uhr
@Destry
Danke für diesen Tipp, das mit SET /p hab ich nicht gewußt!
Werd ich ausprobieren ob mir das hilft ....
Bitte warten ..
Mitglied: 76109
19.06.2009 um 21:34 Uhr
Hallo pbelcl!

Zitat von pbelcl:
aber so wie es aussieht kann man während der Wartezeit NICHT JA oder NEIN tippen
Nein, das habe ich im Gegensatz zu "bastla" nicht bedacht und daher nur ein Warten nach der Abfrage angenommen.

Gruß Dieter
Bitte warten ..
Mitglied: bastla
19.06.2009 um 22:32 Uhr
Hallo pbelcl!

Als VBScript könnte das etwa so aussehen:
01.
Intervall = 120 'Sekunden bis zur nächsten Erinnerung 
02.
Dauer = 600 'Sekunden bis zum Versenden der Mail 
03.
Titel = "Bitte Pulver nehmen!" 'Fenstertitel 
04.
Sound = "sndrec32 /play /close C:\WINDOWS\Media\tada.wav" 'Pfad Sounddatei 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Set Shell = CreateObject("Wscript.Shell") 
08.
LogFile = Replace(WScript.ScriptFullName, ".vbs", ".log") 
09.
Done = False 
10.
 
11.
Do 
12.
    Shell.Run Sound, 0, True 'Soundausgabe 
13.
    Text = "Zeit: " & Int(Dauer / 60) & " Minuten, sonst wird ein Erinnerungsmail verschickt." 
14.
    Antwort = Shell.PopUp(Text,Intervall,Titel,4) 'Popup 
15.
    Select Case Antwort 'PopUp-Ergebnis auswerten 
16.
        Case vbYes 'Ja 
17.
            fso.OpenTextFile(LogFile, 8, True).WriteLine _ 
18.
                Now & vbTab & "Pulver genommen" 
19.
            Done = True 
20.
        Case vbNo 'Nein 
21.
            fso.OpenTextFile(LogFile, 8, True).WriteLine _ 
22.
                Now & vbTab & "Pulver NICHT genommen" 
23.
            Done = True 
24.
        Case Else 'Zeitablauf 
25.
            Dauer = Dauer - Intervall 
26.
            If Dauer <= 0 Then 'Zeit abgelaufen, Mailversand 
27.
                Shell.Run "C:\Utils\gbmail -to mailadresse@domain.com -h smtp.domain.com -from pulver@domain.at -s ""Pulver nicht genommen""" 
28.
                fso.OpenTextFile(LogFile, 8, True).WriteLine _ 
29.
                    Now & vbTab & "Email zur WARNUNG verschickt" 
30.
                Done = True 
31.
            End If 
32.
    End Select 
33.
Loop Until Done
Die Pfade in den Zeilen 4 und 27 sind vermutlich noch anzupassen, und getestet habe ich nur unter XP Pro. Noch eine Anmerkung: Als Soundfile kannst Du kein ".mp3", sondern nur ".wav" verwenden.

Das Script wirst Du vermutlich per "Geplantem Task" starten; es läuft bis zur ersten Entscheidung "Ja" oder "Nein" bzw bis die in Zeile 2 angegebene Zeit in Sekunden erreicht ist.
Eine Literaturempfehlung habe ich leider nicht anzubieten, aber vielleicht findest Du unter den eingetragenen Links etwas Passendes (etwa gleich den zweiten)...

Grüße
bastla
Bitte warten ..
Mitglied: pbelcl
20.06.2009 um 08:19 Uhr
Danke Bastla für Deine Hilfe!!
Werde mir das Script in den nächsten Tagen mal genauer ansehen!

Danke auch für den Tipp, hab mal kurz da reingesehen. Der 2 .Link sieht sehr interessant aus.
Bitte warten ..
Mitglied: pbelcl
20.06.2009 um 08:20 Uhr
Zitat von 76109:
Nein, das habe ich im Gegensatz zu "bastla" nicht bedacht
und daher nur ein Warten nach der Abfrage angenommen.

Meine Frage war ja auch nicht unbedingt eindeutig definiert
Danke trotzdem für den Tipp!
Bitte warten ..
Mitglied: pbelcl
20.06.2009 um 14:20 Uhr
Hi Bastla,

Hab Dein Script gerade ausprobiert, läuft SUPER!!!!!!!

Ist es möglich statt dem Pfad "C:\utils\..."
01.
                Shell.Run "C:\Utils\gbmail -to mailadresse@domain.com -h smtp.domain.com -from pulver@domain.at -s ""Pulver nicht genommen"""
Eine von mir erstellte Systemvariable zu verwenden?
SO:
01.
                Shell.Run "%utildir%\gbmail -to mailadresse@domain.com -h smtp.domain.com -from pulver@domain.at -s ""Pulver nicht genommen"""
klappt es nicht, ich vermute es wird nicht ganz so trivial sein
Bitte warten ..
Mitglied: bastla
20.06.2009 um 15:57 Uhr
Hallo pbelcl!
ich vermute es wird nicht ganz so trivial sein
Halb so wild (insofern hätte ich das gleich einbauen sollen):
Shell.Run Shell.ExpandEnvironmentStrings("%utildir%") & "\gbmail -to mailadresse@domain.com -h smtp.domain.com -from pulver@domain.at -s ""Pulver nicht genommen"""
Grüße
bastla
Bitte warten ..
Mitglied: pbelcl
26.06.2009 um 07:20 Uhr
Nachdem ich's jetzt eine Woche verwendet habe, bin ich begeistert!

Hab noch einige "behübschungen" für das Logging eingebaut. Falls es wen interessiert, hier der Code wie es jetzt bei mir im Einsatz ist:
01.
Intervall = 900 'Sekunden bis zur nächsten Erinnerung 
02.
Dauer = 3600 'Sekunden bis zum Versenden der Mail 
03.
Titel = "!Pulver nehmen!" 'Fenstertitel 
04.
Sound = "sndrec32 /play /close C:\WINDOWS\Media\BP_Pulver.wav" 'Pfad Sounddatei 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Set Shell = CreateObject("Wscript.Shell") 
08.
LogFile = Replace(WScript.ScriptFullName, ".vbs", ".log") 
09.
Done = False 
10.
 
11.
Do 
12.
    Shell.Run Sound, 0, True 'Soundausgabe 
13.
    Text = "Zeit: " & Int(Dauer / 60) & " Minuten, um Pulver zu nehmen, sonst wird ein SMS verschickt." 
14.
	fso.OpenTextFile(LogFile, 8, True).WriteLine _ 
15.
                Now & vbTab & "Pulveranforderung angezeigt" 
16.
    Antwort = Shell.PopUp(Text,Intervall,Titel,4) 'Popup 
17.
    Select Case Antwort 'PopUp-Ergebnis auswerten 
18.
        Case vbYes 'Ja 
19.
            fso.OpenTextFile(LogFile, 8, True).WriteLine _ 
20.
                Now & vbTab & "Pulver eingenommen " 
21.
            Done = True 
22.
        Case vbNo 'Nein 
23.
            fso.OpenTextFile(LogFile, 8, True).WriteLine _ 
24.
                Now & vbTab & "Pulver NICHT genommen, NEIN ausgewählt" 
25.
            Done = True 
26.
        Case Else 'Zeitablauf 
27.
            Dauer = Dauer - Intervall 
28.
            If Dauer <= 0 Then 'Zeit abgelaufen, Mailversand 
29.
                Shell.Run Shell.ExpandEnvironmentStrings("%utildir%") & "\gbmail -to <Mailadresse> -h smtp.domain.at -from pulver@domain.ata -s ""SMS - Pulver nicht genommen""" 
30.
                fso.OpenTextFile(LogFile, 8, True).WriteLine _ 
31.
                    Now & vbTab & "Pulveranforderung wurde ignoriert, SMS zur WARNUNG verschickt" 
32.
                Done = True 
33.
            End If 
34.
    End Select 
35.
Loop Until Done 
36.
	fso.OpenTextFile(LogFile, 8, True).WriteLine _ 
37.
               	Now & vbTab & "-----------------------------------------------"
Vielen Dank euch allen für die TIpps, besonders bastla, Du hast es echt drauf !
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Netzwerk
PPTP-VPN Abbruch nach 20 Sekunden (13)

Frage von Otomombe zum Thema Windows Netzwerk ...

Windows Server
NTP Server Uhrzeit in der Domäne um 20 Sekunden falsch (2)

Frage von blade999 zum Thema Windows Server ...

Windows 7
gelöst Timeout für TCP-Verbindungen mit SCHLIESSEN-WARTEN-Status (1)

Frage von SarekHL zum Thema Windows 7 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...