Окружающий в кавычках параметр с пробелом в аргументе пакетного сценария - PullRequest
0 голосов
/ 12 ноября 2018

Я сталкиваюсь с одной проблемой при передаче окружающего цитируемого параметра с пробелом в аргументе пакетного сценария.Вот мой код и вывод, пожалуйста, дайте мне знать, чего не хватает.

Вот мой скрипт:

:mainFunction
:loop   
    ECHO key %1 and value %2
    IF NOT %1=="" (
        ECHO User has provided parameter.
        IF "%1"=="-installDir" (
            IF "%2"=="" (
                ECHO Invalid value.
                EXIT /B 0
            ) ELSE (
                ECHO Valid value.
                SHIFT
            )
        )
        REM Check other parameters and parse them.
        SHIFT
        GOTO :loop
    )
EXIT /B %ERRORLEVEL%

и вот вывод (с ключом -installDir и значением "D": \ Test \ New Folder "):

C:\Users\Test\Desktop\BatchPro>installer.bat -installDir="D:\Test\New Folder" -addToDesktop="true"
Folder""=="" was unexpected at this time.
C:\Users\Sinha\Desktop\BatchPro>

Так скажите, пожалуйста, почему эта ошибка возникает даже после предоставления параметра в двойных кавычках.

1 Ответ

0 голосов
/ 12 ноября 2018

Я взял то, что было сказано в комментариях и создал ответ. Пожалуйста, попробуйте:

:mainFunction
@echo off
:loop   
    ECHO key %1 and value %2
    IF NOT "%~1"=="" (
        ECHO User has provided parameter.
        IF "%~1"=="-installDir" (
            IF "%~2"=="" (
                ECHO Invalid value.
                EXIT /B 0
            ) ELSE (
                ECHO Valid value.
                SHIFT
            )
        )
        REM Check other parameters and parse them.
        SHIFT
        GOTO :loop
    )
EXIT /B %ERRORLEVEL%

Вы можете запустить for /? из терминала cmd и прочитать в разделе "подстановка переменных ":

%~I         - expands %I removing any surrounding quotes (")
...