вызвать пакетный файл из другого параметра передачи - PullRequest
14 голосов
/ 04 мая 2011

У меня есть следующий пакетный файл, который при запуске запрашивает ввод у пользователя. Это отлично работает.

@REM Sample batch file
SET PARAM1=""
SET PARAM2=""
SET /P PARAM1=Enter param1: %=%
SET /P PARAM2=Enter param2: %=%
@REM Process the params

Я хочу иметь возможность теперь вызывать этот пакетный файл из другого и передавать значения параметров в вышеуказанный пакетный файл, и пользователь не будет запрашивать ввод. Как мне этого добиться?

Ответы [ 3 ]

19 голосов
/ 04 мая 2011

Я полагаю, вы хотите что-то подобное?

@echo off

:: Fetch param1
set "param1=%~1"
goto :param1Check
:param1Prompt
set /p "param1=Enter parameter 1: "
:param1Check
if "%param1%"=="" goto :param1Prompt

:: Fetch param2    
set "param2=%~2"
goto :param2Check
:param2Prompt
set /p "param2=Enter parameter 2: "
:param2Check
if "%param2%"=="" goto :param2Prompt

:: Process the params
echo param1=%param1%
echo param2=%param2%

Test.bat запускается без аргументов:

>>test.bat
Enter parameter 1: foo
Enter parameter 2: bar
param1=foo
param2=bar

Test.bat запускается с аргументами:

>>test.bat foo bar
param1=foo
param2=bar

Альтернатива, использование переменных окружения вместо аргументов командной строки (см. Также ответ ppumkin ):

@ эхо выключено

:: Получить параметры1
set "param1 =% globalparam1%"
Перейти: param1Проверить
: Param1Prompt
set / p "param1 = Ввести параметр 1:"
: Param1Check
if "% param1%" == "" goto: param1Prompt

:: Получить парам2
set "param2 =% globalparam2%"
перейти: param2Check
: Param2Prompt
set / p "param2 = Введите параметр 2:"
: Param2Check
если "% param2%" == "" перейти: param2Prompt

:: Обработка параметров
echo param1 =% param1%
echo param2 =% param2%

Просто установите переменные среды globalparam1 и globalparam2 в вашей среде или в вызывающем пакетном файле, чтобы подавить запрос:

Test.bat запускается без установки переменных среды:

>>test.bat
Enter parameter 1: foo
Enter parameter 2: bar
param1=foo
param2=bar

Test.bat запускается с настройкой переменных среды:

>>set globalparam1=foo

>>set globalparam2=bar

>>test
param1=foo
param2=bar

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

9 голосов
/ 04 мая 2011

In main.cmd:

set param1=%~1
set param2=%~2
echo %param1% - %param2%

In caller.cmd:

call main.cmd hello world

Вывод:

hello - world

Ссылка для параметров пакетного сценария

3 голосов
/ 04 мая 2011

caller.bat /.cmd

@echo off
cls
set vara="Hello There"
set varb=67890

echo Variables set in caller.bat:
echo %vara%
echo %varb%

echo Calling passTo.bat
call passTo.bat %vara% %varb%

passTo.bat /.cmd

@echo off
echo.
echo Inside passTo.bat
set vara=%1
set varb=%2

echo vara: %vara%
echo varb: %varb%

Вызов passTo.bat сам по себе из окон dos или команд или любого другого приложения /ярлык

call passTo.bat PARAM1 PARAM2

Использование набора переменных из caller.bat внутри другого пакета

@echo off
echo.
echo Inside another.bat
echo -- You can start another batch here that sets the environment variables

set varOne=%vara% <- This gets the Environments Variable set in the nested batch bat using SET
set varTwo=%varb%

echo vara: %varOne% 
echo Is the same as
echo %vara%

echo varb: %varTwo%
echo is again the same as
echo %varb$

Возможно, вам придется использовать SETX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...