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-Key: 99350

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

Printed on: April 19, 2024 at 06:04 o'clock

Member: bastla
bastla Oct 15, 2008 at 13:06:56 (UTC)
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
Member: Blueberry
Blueberry Oct 15, 2008 at 13:12:50 (UTC)
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
Member: bastla
bastla Oct 15, 2008, updated at Oct 18, 2012 at 16:36:24 (UTC)
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
Member: Blueberry
Blueberry Oct 15, 2008 at 14:05:47 (UTC)
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
Member: bastla
bastla Oct 15, 2008 at 14:16:49 (UTC)
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
Member: Biber
Biber Oct 15, 2008 at 15:06:12 (UTC)
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
Member: Blueberry
Blueberry Oct 16, 2008 at 06:25:09 (UTC)
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
Member: bastla
bastla Oct 16, 2008 at 07:45:59 (UTC)
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
Member: Blueberry
Blueberry Oct 16, 2008 at 07:54:28 (UTC)
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]
Member: Blueberry
Blueberry Oct 16, 2008 at 09:08:01 (UTC)
Goto Top
Hallo Bastla,

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

Mit freundlichen Grüssen

Blueberry