Запускать команды в командном файле, который находится внутри другого командного файла - PullRequest
1 голос
/ 22 января 2012

Как запустить команды в командном файле, который находится внутри другого командного файла ......

Я пытаюсь запустить команды в другой консоли, кроме командной строки, в командном файле, но не могуЯ могу запустить другую консоль в командном файле, но не могу передать ей команды.

Ответы [ 3 ]

3 голосов
/ 22 января 2012

Моя первая интерпретация вопроса привела меня к мысли, что Sampath хотел один пакетный сценарий, который имеет два набора команд.При его вызове запускается 1-й набор команд в родительском окне, и открывается второе окно, которое запускает тот же сценарий с 2-м набором команд.

"% ~ f0" даст полный путь ктекущий выполняемый пакетный скрипт.Простой аргумент командной строки служит переключателем для определения того, какой код запускать.

@echo off
if "%~1"==":PART2" goto %~1

::use this line if 2nd window is to remain open upon completion
::start "%~f0" :PART2

::use this line if 2nd window is to close upon completion
start cmd /c "%~f0" :PART2

echo Test parent output
pause
exit /b

:PART2
echo Test child output
pause
exit /b

Андрей М предполагает, что Sampath хочет иметь возможность динамически отправлять команды во 2-е окно.Это можно сделать с помощью двух сценариев, которые я назову master.bat и slave.bat.

slave.bat просто читает команды из stdin и выполняет их.Master.bat запускает ведомое устройство с вводом, перенаправленным в командный файл, а затем добавляет команды в командный файл.

Ниже приведен пример master.bat, который демонстрирует отправку команд на подчиненном устройстве с помощью динамической обработки.Обратите внимание, что мастер запрашивает команду, но окно ведомого будет иметь фокус.Убедитесь, что вы нажимаете на мастера, чтобы вы могли ввести команду по вашему выбору.

@echo off

:: create an empty command file
type nul >cmds.txt

:: start the slave with input redirected to the command file
start slave.bat ^<cmds.txt

:: issue some commands by appending them to the command file
>>cmds.txt echo echo command 1
>>cmds.txt echo echo command 2
>>cmds.txt echo echo(
>>cmds.txt echo rem /?

:: ask for a command to send to the slave
set /p "cmd=Enter a command to be sent to the slave: "

:: send the command
>>cmds.txt echo %cmd%

::pause so we can see the results in the slave window
for /l %%n in (1 1 1000000) do rem

::tell the slave to exit
>>cmds.txt echo exit

А вот и slave.bat

@echo off
:top
set "cmd="
set /p "cmd="
%cmd%
goto :top
0 голосов
/ 23 января 2012

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

Я реализовал это, создав пакетный файл, который содержит все команды (фрагменты кода), которые я считаю полезными, и затем использовал мои другие пакетные сценарии для вызова этого «основного» файла для моих фрагментов.

Например, в моем файле MASTER_BAT.BAT пример фрагмента для создания дат в другом формате для использования выглядит следующим образом:

GOTO:%~1

:GET_CURRENT_DATE
:: Created: 1/19/2012
:: Creates variables for the date format in different forms.
:: No additional arguments required
SET DISABLED=0
IF [%DISABLED%] == [1] GOTO:EOF
:: Created: 11/30/11
:: Creates date formats.
Set mdy=%date:~4,2%-%date:~7,2%-%date:~12,4%
Set mdY=%date:~4,2%-%date:~7,2%-%date:~10,4%
Set Dmdy=%date:~0,4%%date:~4,2%-%date:~7,2%-%date:~12,4%
Set DmdY=%date:~0,4%%date:~4,2%-%date:~7,2%-%date:~10,4%
Set ymd=%date:~12,4%-%date:~4,2%-%date:~7,2%
Set ymd=%date:~10,4%-%date:~4,2%-%date:~7,2%

GOTO:EOF

И в моем CHILD_BAT.BAT я хочу использовать этот фрагмент для создания форматов даты ... допустим, я хочу сделать так, чтобы я мог вызывать дату по текущей дате в формате мм / дд / гг:

CALL MASTER_BAT.BAT "GET_CURRENT_DATE"
ECHO %mdy%
PAUSE

Ваш вывод для CHILD_BAT.BAT будет:

1-23-12
Press any key to continue...

Кроме того, любые переменные, созданные в CHILD_BAT.BAT до команды CALL, также будут переданы в сценарий MASTER_BAT.BAT. Однако для взаимодействия цикла, включающего CALL, не будет передана временная переменная цикла for.

Надеюсь, это полезно.

РЕДАКТИРОВАТЬ: обратите внимание, что мой фрагмент можно использовать для формата даты США.

0 голосов
/ 22 января 2012

Вы можете попробовать оператор вызова:

call batchname.bat

это запустит указанный пакетный файл в текущем приглашении на открытие

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