Создать пакетный файл с несколькими именованными параметрами

У меня есть требование создать пакетный файл с несколькими необязательными параметрами.

Пример

MyTestSqlBatch.bat ServerName DatabaseName [UserId] [Password] [Command] [parameter]

здесь ServerName и DatabaseName являются обязательными. И UserId, Password являются необязательными для пользователей аутентификации Windows. Command также является необязательным параметром (иногда мне нужно вызвать пакетный файл с параметром Command для аутентификации Windows). если я хочу запустить пакетный файл для проверки подлинности SQL, я также хочу передать пароль UserId.

Может ли кто-нибудь предложить по этому поводу, как создать именованные параметры (или) какой-либо лучший способ справиться с этим?

Спасибо,


person Jagadeesh    schedule 27.02.2019    source источник
comment
%1 %2 и т.д..   -  person Gerhard    schedule 27.02.2019
comment
Чтобы передать пустые параметры, выполните MyTestSqlBatch.bat ServerName DatabaseName "" "" "Command"; в скрипте используйте %~1 для удаления кавычек...   -  person aschipfl    schedule 27.02.2019
comment
Вы также можете использовать префиксы для параметров, чтобы избежать указания пустых строк.   -  person montonero    schedule 27.02.2019


Ответы (2)


Проще:

@echo off
setlocal

set "params=%*"
set "%params: =" & set "%"

echo Server       : %SVR%
echo Database     : %DB%
echo Command      : %Command% %Parameter%
echo UserId       : %UserId%
echo Password     : %Password%

Синтаксис:

MySqlBatch.bat [SVR=ServerName] [DB=Database] [Command=value] [Parameter=value] [UserId=value] [Password=value]

Пример:

MySqlBatch.bat SVR=local DB=SampleDB UserId=sa Password=Test1234

Дополнительные сведения см. в разделе разделить строку со строкой в ​​качестве разделителя. Обратите внимание на комментарий к такому ответу...

person Aacini    schedule 27.02.2019

Я создал пакетный файл с именованными и необязательными параметрами.

@echo off
setlocal
set SVR=%1
set DB=%2


set uid=
set pwd=
set CM=
set CP=

:loop
IF NOT "%1"=="" (
    IF "%1"=="-SVR" (
        SET SVR=%2
        SHIFT
    )
    IF "%1"=="-DB" (
        SET DB=%2
        SHIFT
    )

    IF "%1"=="-UserId" (
        SET uid=%2
        SHIFT
    )
    IF "%1"=="-Password" (
        SET pwd=%2
        SHIFT
    ) 
    IF "%1"=="-Command" (
        SET CM=%2
        SHIFT
    )
    IF "%1"=="-Parameter" (
        SET CP=%2
        SHIFT
    )
    SHIFT
    GOTO :loop
)

echo Server       : %SVR%
echo Database     : %DB%

echo Command      : %CM% %CP%

echo UserId : %uid%
echo Password : %pwd%

Синтаксис:

MyTestSqlBatch.bat -SVR [ServerName] -DB [Database] -Command [value] -Parameter [value] -UserId [value] -Password [value]

Пример:

MyTestSqlBatch.bat -SVR local -DB SampleDB -UserId sa -Password Test1234
person Jagadeesh    schedule 27.02.2019