2017-12-19 4 views
1

Wenn ich die Batch-Datei wie unten veröffentlicht starten, bekam ich diesen Fehler (war zu diesem Zeitpunkt unerwartet.
ich denke, das auf der IF Kommandozeile if %ad%==60 ( aber ich bin nicht sicher.Was ist der Grund für "(war zu dieser Zeit unerwartet." In einer IF-Befehlszeile mit% var%?

geschieht (zu diesem Zeitpunkt unerwartet.

@echo off 
color 0f 
title TITLE 
mode con cols=50 lines=25 
set ad = 0 

set s = 0 
set m = 0 
set h = 0 
set d = 0 

if exist start.txt (
    del start.txt 
    goto :1 
) else (
    exit 
) 
:1 
if %ad%==60 (
:: Something here 
set ad = 0 
) 

:: MINUTES 
if %s%==60 (
set /a m=m+1 
set s = 0 
) 
:: HOURS 
if %m%==60 (
set /a h=h+1 
set m = 0 
) 
:: DAYS 
if %h%==24 (
set /a d=d+1 
set h = 0 
) 

cls 
echo Something here... 
timeout 1 > nul 
set /a ad=ad+1 
set /a s=s+1 
goto :1 

Was könnte der Grund für diese Fehlermeldung bei der Ausführung der Batch-Datei sein?

+3

Entfernen Sie die Leerzeichen von all Ihren 'set var = Werten. Beispiel 'set ad = 0' =>' set ad = 0'. Else 'ad' ist leer, aber die Variable' ad 'ist auf' 0' gesetzt – jeb

+0

@Kake Bitte lesen Sie die Antworten zu [Warum wird keine Zeichenkette ausgegeben mit 'echo% var%' nach der Verwendung von 'set var = text' auf der Befehlszeile?] (https://stackoverflow.com/a/26388460/3074564) und [Symbol entspricht NEQ, LSS, GTR usw. in Windows-Stapeldateien] (https://stackoverflow.com/a/47386323/3074564). – Mofi

+0

Mögliches Duplikat von [Warum wird nach der Verwendung von 'set var = text' in der Befehlszeile keine Zeichenfolge mit 'echo% var%' ausgegeben?] (Https://stackoverflow.com/questions/26386697/why-is-no-string -output-with-echo-var-nach-using-set-var-text-on-comman) – aschipfl

Antwort

4

Für einen Start,

set ad = 60 

wird nicht gesetzt ad-60. Es wird die Variable adspace auf space60 setzen und ad zu dem belassen, was es war, bevor das Skript gestartet wurde.

In Ihrem Fall ist es mit ziemlicher Sicherheit eine leere Zeichenfolge, da der Befehl, die sich daraus ergeben würde die gleiche wie in der folgenden Transkript (beachten Sie den Fehler generiert hat) würde:

d:\pax> if ==60 (
(was unexpected at this time. 

Wenn Sie Mangel schön auseinander gezogen Ausdrücke, Sie wissen bereits, wie Sie das tun, da Sie es verwendet, um h zu inkrementieren. Mit anderen Worten:

set /a "ad = 0" 
+2

Der letzte Teil Ihrer Antwort ist ein bisschen irreführend, da 'set/a' sich anders verhält als' set'. 'set/a' entfernt sich alle Leerzeichen, es hat nichts mit den Anführungszeichen zu tun. – jeb

+0

jeb/Mofi, ich bin mir nicht sicher, was genau Sie im letzten Absatz für irreführend halten. Es bietet eine Möglichkeit, einen Ausdruck so zu gestalten, dass die Variable '=' und der Wert nicht aneinander angrenzen müssen. Wenn es einen Fehler dabei gibt, lass es mich wissen. – paxdiablo

2

Dies ist technisch nicht eine Antwort, (das bereits ausreichend zur Verfügung gestellt wurde). Es ist nur ein Beispiel zu zeigen, wie Sie ggf. Ihr Skript ein wenig verkürzen können:

@Echo Off 
Color 0F 
Title TITLE 
Mode 50,25 

Set /A ad=s=m=h=d=0 

If Not Exist "start.txt" Exit /B 
Del "start.txt" 

:1 
If %ad% Equ 60 (
    Rem Something here 
    Set "ad=0" 
) 

Rem Minutes 
If %s% Equ 60 Set /A m+=1,s-=60 
Rem Hours 
If %m% Equ 60 Set /A h+=1,m-=60 
Rem Days 
If %h% Equ 24 Set /A d+=1,h-=24 

ClS 
Echo Something here... 
Timeout 1 >Nul 
Set /A ad+=1,s+=1 
GoTo :1 

Hinweise:
1. Mit Timeout 1 wird nicht erhöht clocklike (in genau Sekunden), wäre es etwa eine Sekunde plus sein die Zeit, die benötigt wird, um erneut durch :1 zu laufen.
2. Achten Sie darauf, nicht in die Oktalfalle von Set /A zu fallen, indem Sie sicherstellen, dass Sie keine führenden 0 in Ihren Variablen haben.

Verwandte Themen