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
)
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...
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
.)
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
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With