( was unexpected at this time - batch script

33,496

Solution 1

Actually, the problem is not on the first line.

The problem is that cmd does variable substitution immediately when it parses the IF statement, including its body. Therefore the line:

IF %isDefault%==y (

is problematic because isDefault isn't set when the outer IF statement is parsed, so it becomes:

IF ==y (

and hence you get the error about ( being unexpected. You can get around this by enabling the command extension (SETLOCAL ENABLEDELAYEDEXPANSION) for delayed environment variable expansion (see set /? for details). You also can rewrite your script:

@ECHO OFF
IF NOT "%1"=="" GOTO :EOF
:LOOP1
SET /P isDefault=Value Missing, do you want to use default values [1,1,10,Local Area Connection 2]?[y/n]
IF "%isDefault%"=="y" (
    SET from=1
    SET step=1
    SET to=10
    SET lan="Local Area Connection 2"
    GOTO :USERLOOP
)
IF "%isDefault%"=="n" GOTO :EOF
GOTO :LOOP1

(I made some other changes, such as using the built-in :EOF label instead of :END.)

Solution 2

As jamesdlin said, it's a problem with empty variables and also with delayedExpansion.
Then the solution is simple by replacing %isDefault% with !isDefault!, this works even if isDefault is empty.

setlocal EnableDelayedExpansion
IF [%1]==[] (
    :LOOP1
    SET /P isDefault=Value Missing, do you want to use default values [1,1,10,Local      Area Connection 2]?[y/n]
    IF !isDefault!==y (
        SET from=1
        SET step=1
        SET to=10
        SET lan="Local Area Connection 2"
        GOTO :USERLOOP
    )
    IF !isDefault!==n GOTO :END
    GOTO :LOOP1 
)

Solution 3

I had a very similar problem and code construct that was causing me a lot of pain to resolve. My error message was ". was unexpected at this time"...

It took me a couple long days to figure out another similar consideration due to this problem... Please take a look a the following problem and subsequent solution here: ". was unexpected at this time" generated from batch script line 'if exist [file] (...

The solution was simply the treatment of '(' and ')' on ECHO lines inside an IF statement block.

The point is, do consider treatment of special characters as a possible source of a problem when troubleshooting IF (and possibly FOR) statements.

HTH someone...

Share:
33,496
choppy
Author by

choppy

Updated on July 05, 2022

Comments

  • choppy
    choppy 6 months

    I'm using the batch script below and get an error

    ( was unexpected at this time.

    I know that the problem is in the first line but I don't understand what is wrong. Any ideas ?

    script:

    IF [%1]==[] (
        :LOOP1
        SET /P isDefault=Value Missing, do you want to use default values [1,1,10,Local      Area Connection 2]?[y/n]
        IF %isDefault%==y (
            SET from=1
            SET step=1
            SET to=10
            SET lan="Local Area Connection 2"
            GOTO :USERLOOP
        )
        IF %isDefault%==n GOTO :END
        GOTO :LOOP1 
    )