( was unexpected at this time - batch script

前端 未结 3 698
别跟我提以往
别跟我提以往 2021-02-08 01:10

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

相关标签:
3条回答
  • 2021-02-08 02:00

    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 
    )
    
    0 讨论(0)
  • 2021-02-08 02:00

    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...

    0 讨论(0)
  • 2021-02-08 02:04

    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.)

    0 讨论(0)
提交回复
热议问题