2016-07-27 30 views
1

Ich habe eine Fledermaus-Datei, die nach 23:00 Uhr Timing und Kicks einiger weiterer Schritte nach 23:00 Uhr überprüft.Bat-Datei, wenn vor 9 Uhr ausgeführt, gibt den Fehler, ungültige Nummer. Numerische Konstanten sind entweder Dezimal (17),

Die Charge, wenn später auf 10:00 AM gestartet wird, funktioniert. Aber die gleichen Schläger, wenn sie bei 09:00 AM lief nicht und wirft wie unten einen Fehler funktioniert:

Invalid number. Numeric constants are either decimal (17), 
hexadecimal (0x11), or octal (021). 

Ich habe beobachtet, dass diese BAT-Datei nur für eine zweistellige Stunde arbeitet und nicht die einstelligen Stunden so als 1,2,3,4,5,6,7,8,9.

Code:

@For /F "tokens=1,2,3,4 delims=/-: " %%A in ('time /t') do @(
Set Hour=%%A 
Set Minute=%%B 
) 
echo current hour is %Hour% 
echo current Minute is %Minute% 

set /A remaining_hour=23-%Hour% 
set /A remaining_minutes=60-%Minute% 

echo Remaining hours to reach 23:00 is %remaining_hour% 
echo Remaining Minutes to reach 23:00 is %remaining_minutes% 

Könnten Sie mir bitte helfen, loszuwerden, die Fehlermeldung zu bekommen?

Modified Code unten gemäß den Vorschlägen, die immer noch nicht funktionieren, wenn ich die bat-Datei mit meiner Systemzeit 09.00 Uhr

Modified Code 1 geändert versuchen zu testen:

@echo off 
@For /F "tokens=1,2,3,4 delims=/-: " %%A in ('time /t') do @(
Set Hour=%%A 
for /F "tokens=* delims=0" %%N in ("%Hour%") do set "Hour=%%N" & set /A "Hour+=0" 
Set Minute=%%B 
) 
setlocal EnableDelayedExpansion 
echo current hour is %Hour% 
echo current Minute is %Minute% 

set /A remaining_hour=23-%Hour% 
set /A remaining_minutes=60-%Minute% 

echo Remaining hours to reach 23:00 is %remaining_hour% 
echo Remaining Minutes to reach 23:00 is %remaining_minutes% 

set /A sleep_Minutes=((remaining_minutes+(60*remaining_hour))*60) 

echo Total sleep time is %sleep_Minutes% 
pause 
+1

Hinweis: Run in einem Eingabeaufforderungsfenster 'set /?' und lese alle Ausgabehilfeseiten. Auf der letzten Hilfeseite können Sie einige spezielle Umgebungsvariablen wie 'DATE' und' TIME' lesen. Ja, Sie brauchen den Befehl 'time/t' nicht und verarbeiten die Ausgabe mit dem Befehl' for'. Es gibt die Umgebungsvariable TIME, die die aktuelle Zeit enthält. Führen Sie im Eingabeaufforderungsfenster 'echo% TIME%' aus, um den aktuellen Wert und das für die Zeitzeichenfolge verwendete Format gemäß den Regions- und Spracheinstellungen anzuzeigen. – Mofi

Antwort

3

Die set /A Befehl interpretiert Zahlen mit Nullen als Einsen oktal vorhergehenden - siehe set /?:

Numerische Werte sind Dezimalzahlen, es sei denn mit 0x für Hexadezimalzahlen und 0 für Oktalzahlen. Also ist 0x12 dasselbe wie 18 ist dasselbe wie 022. Bitte beachten Sie, dass die Oktalnotation verwirrend sein kann: 08 und 09 sind keine gültigen Zahlen, da 8 und 9 keine gültigen Oktalziffern sind.

Sie können dies leicht lösen, indem die führenden Nullen in dem Hour Wert Entfernung:

for /F "tokens=* delims=0" %%N in ("%Hour%") do set "Hour=%%N" & set /A "Hour+=0" 
for /F "tokens=* delims=0" %%N in ("%Minute%") do set "Minute=%%N" & set /A "Minute+=0" 

Dies ist der vollständige Code mit dem oben implementiert:

@for /F "tokens=1,2,3,4 delims=/-: " %%A in ("%TIME%") do @(
    for /F "tokens=* delims=0" %%N in ("%%A") do set "Hour=%%N" & set /A "Hour+=0" 
    for /F "tokens=* delims=0" %%N in ("%%B") do set "Minute=%%N" & set /A "Minute+=0" 
) 
echo current hour is %Hour% 
echo current Minute is %Minute% 

set /A remaining_hour=23-Hour 
set /A remaining_minutes=60-Minute 

echo Remaining hours to reach 23:00 is %remaining_hour% 
echo Remaining Minutes to reach 23:00 is %remaining_minutes% 
+0

, ich habe versucht, das oben mit meiner Systemzeit auf etwa 09 eingestellt und das gibt mir immer noch die Fehlermeldung als 'aktuelle Stunde ist 09 aktuelle Minute ist 38 Ungültige Nummer. Numerische Konstanten sind entweder dezimal (17), hexadezimal (0x11) oder oktal (021). Verbleibende Stunden zu erreichen 23:00 ist Verbleibende Minuten zu erreichen 23:00 ist 22' – user2075017

+0

Ich kopierte die Codezeile für Sie auch für die "Minute" Wert als auch ... – aschipfl

+0

Hallo zusammen, Das Problem ist mit der hour.So ich glaube, die Verwendung des Codes wie unten scheint nicht zu arbeiten.Ich habe es unter 'modifiedcode1' in meine eigentliche Abfrage – user2075017