blueberry
Goto Top

In IF ein Klammer Problem

Hallo Zusammen,

Ich habe das Problem das ich die Fehlermeldung bekomme ""(" ist syntaktisch an dieser Stelle nicht verarbeitbar."

Und mein Code ist:

01. IF %I%-%DAYOFYEARNUMBER LSS 4 - %WEEKDAY% (
02. SET /A YEARNUMBER= %Y% +1
03. SET WEEKNUMBER=1 )

Was mach ich falsch ?
Ich habe alle Variablen gebildet und finde sonst eigentlich keinen Fehler...
Danke für eure Mithilfe!

Mit freundlichen Grüssen

Blueberry

Content-ID: 99350

Url: https://administrator.de/forum/in-if-ein-klammer-problem-99350.html

Ausgedruckt am: 10.04.2025 um 11:04 Uhr

bastla
bastla 15.10.2008 um 15:06:56 Uhr
Goto Top
Hallo Sandro!

Leicht verspätet: Alles Gute zum Geburtstag! face-smile
Berechnungen in Batch kannst Du eigentlich nur bei der Zuweisung zu einer Variablen machen - daher:
SET /A Diff1=%I%-%DAYOFYEARNUMBER%
SET /A Diff2=4-%WEEKDAY%
IF %Diff1% LSS %Diff2% (
    SET /A YEARNUMBER=%Y%+1
    SET WEEKNUMBER=1
)
Grüße
bastla
Blueberry
Blueberry 15.10.2008 um 15:12:50 Uhr
Goto Top
Hallo Bastla,

Erstma Danke für den Glückwunsch^^. (Hattest wohl Langeweile und hast mal die Profiledurchgeklickt oder woher weisst du das???).

Und zum anderen:

Auch Danke xDD. Ich guck gleich ma ob das Funktioniert...

[EDIT] Ich hab es getestet, aber er gibt immer noch den gleichen Fehler aus [/EDIT]


Mit freundlichen Grüssen

Blueberry
bastla
bastla 15.10.2008, aktualisiert am 18.10.2012 um 18:36:24 Uhr
Goto Top
Hallo Sandro!

... woher weisst du das???
Mein Gedächtnis lässt zwar schön langsam nach, aber so lange ist jenes auch noch nicht her ... face-wink
Ich hab es getestet, aber er gibt immer noch den gleichen Fehler aus
Mein Test sieht so aus:
@echo off & setlocal
set /a i=10
set /a DAYOFYEARNUMBER=8
set /a WEEKDAY=1
set /a y=2008

SET /A Diff1=%I%-%DAYOFYEARNUMBER%
SET /A Diff2=4-%WEEKDAY%
IF %Diff1% LSS %Diff2% (
    SET /A YEARNUMBER=%Y%+1
    SET WEEKNUMBER=1
)
echo %YEARNUMBER%_%WEEKNUMBER%
und bringt das gewünschte Ergebnis. Demzufolge werden wir uns wohl ansehen müssen, was in Deinem Batch vor dem entsprechenden Teil steht ...

Grüße
bastla
Blueberry
Blueberry 15.10.2008 um 16:05:47 Uhr
Goto Top
Also ich habe das & setlocal nicht...
Ich habe ein paar Sub-Programme in meiner Batch-Datei... Und ichhabe mal gelesen, dass ich dann die Variablen nicht mehr übergeben kann (also die heissen alle :sub1 ausser das sich die zahl immer um 1 erhöht... Und das is alles im einem Batch auch das richtige Programm...)

Mit freundlichen Grüssen

Blueberry
bastla
bastla 15.10.2008 um 16:16:49 Uhr
Goto Top
Hallo Sandro!

Am "setlocal" wird's vermutlich nicht liegen.

Wenn Du Dir hinsichtlich der Variablenwerte nicht sicher bist, kannst Du diese ja zur Kontrolle an der entsprechenden Stelle durch
echo %Variable%
ausgeben lassen.

Grüße
bastla
Biber
Biber 15.10.2008 um 17:06:12 Uhr
Goto Top
Moin Sandro,

ebenfalls Glückwunsch nachträglich.
Und ichhabe mal gelesen, dass ich dann die Variablen nicht mehr übergeben kann
Ich hoffe, das war nicht in diesem Forum. Ist nämlich Bullshit bzw. so nicht richtig.
Gewöhne Dir ruhig frühzeitig (=z.B. ab heute) an, IMMER "setlocal" zu verwenden und nur in absolut begründeten Ausnahmefällen kein "setlocal".

Grüße
Biber
Blueberry
Blueberry 16.10.2008 um 08:25:09 Uhr
Goto Top
Hallo Biber,

Ich danke auch dir für den Glückwunsch face-smile.
Und wegem Setlocal, da gibts ja irgendwie eine erweiterung... also ich weiss nicht genau wie die heisst, aber es gibt sie. Ich hab grad mal nachgeschaut und es war soweit ich weiss, nicht in diesem Forum. Evtl. wisst ihr ja von was ich spreche face-wink. Ich weisses jedenfalls nicht mehr...

Ehm noch ne Frage:
Bei mir wird die Variable YEATNUMBER nicht definiert...

IF %DAYOFYEARNUMBER% LEQ %DIFFL3% IF %JAN1WEEKDAY% LSS 4 CALL :SUB1 ELSE SET YEARNUMBER=%Y%

:SUB1
SET /A YEARNUMBER=%Y%-1

IF %JAN1WEEKDAY%==5 (SET WOCHEN=53) ELSE (IF %JAN1WEEKDAY%==6 IF "%Y%-%LEAPYEAR%" == %Y% (SET WOCHE= 53) ELSE (SET WOCHE= 52))

GOTO :EOF


Mit freundlichen Grüssen

Blueberry
bastla
bastla 16.10.2008 um 09:45:59 Uhr
Goto Top
Hallo Sandro!

Besser so:
IF %DAYOFYEARNUMBER% LEQ %DIFFL3% IF %JAN1WEEKDAY% LSS 4 (CALL :SUB1) ELSE (SET YEARNUMBER=%Y%)
GOTO :EOF
Ohne das "GOTO :EOF" wird auf jeden Fall ":SUB1" ausgeführt.

Falls es aber nach dem Teil ":SUB1" in beiden Fällen weitergehen soll, müsstest Du eine weitere Sprungadresse vergeben (zB ":Weiter") und im "ELSE"-Fall dort hin springen:
IF %DAYOFYEARNUMBER% LEQ %DIFFL3% IF %JAN1WEEKDAY% LSS 4 (CALL :SUB1) ELSE (SET YEARNUMBER=%Y% & GOTO :Weiter)
Grüße
bastla
Blueberry
Blueberry 16.10.2008 um 09:54:28 Uhr
Goto Top
Hallo Bastla,

Wenn ich die Variante 1 nehme, dann beendet es ja das Programm... Und das Programm ist noch weit grösser als nur der Teil face-wink.
Wo muss ich das :weiter setzten wenn ich Variante zwei nehme ?

Mit freundlichen Grüssen

Blueberry

[EDIT]
Ich habe das Problem gelöstface-smile Die Lösung ist eigentlich ganz einfach:
IF %DAYOFYEARNUMBER% LEQ %DIFFL3% (SET VAR1=1) ELSE (SET VAR1=0)
IF %JAN1WEEKDAY% LSS 4 (SET VAR2=1) ELSE (SET VAR2=0)
SET /A VAR3=%VAR1%+%VAR2%
IF %VAR3% GTR 1 (CALL :SUB1) ELSE (SET YEARNUMBER=%Y%)
[/EDIT]
Blueberry
Blueberry 16.10.2008 um 11:08:01 Uhr
Goto Top
Hallo Bastla,

Du kannst, wenn dus kannst face-wink, diesen Thread schliessen...
mach noch n Kommentarface-smile

Mit freundlichen Grüssen

Blueberry