Пакетный сценарий - ВЫЗЫВАЙТЕ другой пакетный сценарий для вызова строки для выполнения определенной команды

Можно ли создать командный файл с кучей команд (commands.bat)

ECHO HELLO
ECHO HOLA
ECHO KONICHIWA
ECHO ANYONGHASEYO
ECHO BONJOUR

, затем в другом пакетном файле CALL commands.bat и выполнить команду только в строке 2 или строке 4, не зная, что находится в этих строках?


person Anthony Miller    schedule 15.09.2011    source источник
comment
Да, сделать echo Hola и echo Bonjour условными, зависящими от определенного аргумента, и при вызове commands.bat отправлять этот аргумент.   -  person adarshr    schedule 15.09.2011
comment
commandwindows.com/batchfiles-branching.htm   -  person sehe    schedule 15.09.2011
comment
Отредактировал свой вопрос. Упущена важная деталь: вызов их по номеру строки, а не по тому, что в их строке содержится.   -  person Anthony Miller    schedule 15.09.2011
comment
@sehe Я не уверен, на что вы пытались указать мне, даже с исходным вопросом.   -  person Anthony Miller    schedule 15.09.2011
comment
@Mechaflash Ты можешь сделать одно. Имейте мастер commands.bat, который будет содержать только список echo операторов. В зависимости от номера строки (или диапазона), который вы можете получить, скопируйте содержимое с этого номера строки до конца файла в отдельный файл temp.bat и выполните его.   -  person adarshr    schedule 15.09.2011


Ответы (5)


Вот что я имел в виду в своем комментарии.

master.bat

echo abcd
echo hello
echo notepad
echo public
echo wind
echo balance

command.bat

@echo off

more +3 master.bat > temp.bat & temp.bat

Распечатывает для меня ниже.

public
wind
balance

Чтобы начать с первой строки, используйте +0.

Если вы хотите, чтобы этот номер отправлялся через командную строку, вот немного измененная версия:

command.bat

@echo off

more +%1 master.bat > temp.bat & temp.bat

Вы можете запустить это с помощью таких команд, как command.bat 0 или command.bat 3.

person adarshr    schedule 15.09.2011
comment
Если вы хотите просто выполнить n-ю строку, а не n-through-EOF, вы можете взглянуть на stackoverflow.com/questions/6409869/ и объедините его с моим ответом, чтобы получить то, что вы хотите. - person adarshr; 15.09.2011
comment
Я собираюсь использовать ответ Джеба из вашего связанного сообщения. Постановка ответа. - person Anthony Miller; 15.09.2011

Небольшой изящный трюк, который я знал (когда были в моде пакетные файлы)

SET JUMPTO=HOLA
goto BRANCH_%JUMPTO% 

:BRANCH_HELLO
echo HELLO
GOTO :QUIT

:BRANCH_HOLA
echo HOLA
GOTO :QUIT

:BRANCH_KONICHIWA
echo KONICHIWA
GOTO :QUIT

:BRANCH_ANYONGHASEYO
echo ANYONGHASEYO
GOTO :QUIT

:BRANCH_BONJOUR
echo BONJOUR
GOTO :QUIT

:BRANCH_
echo Illegal branch?!

:QUIT

Когда вы замените первую строку на, например, SET JUMPTO=%1

Некоторые тестовые результаты:

E:>. \ test.cmd ПРИВЕТ!

E:\>SET JUMPTO=HELLO

E:\>goto BRANCH_HELLO

E:\>echo HELLO
HELLO

E:\>GOTO :QUIT

E:>. \ test.cmd

E:\>SET JUMPTO=

E:\>goto BRANCH_

E:\>echo Illegal branch?!
Illegal branch?!
E:\>
person sehe    schedule 15.09.2011

Поделитесь своим мнением по этому поводу в качестве решения. Это работает, но я знаю, что некоторым людям не нравится связывать команду FIND с чем-либо = /

REM Contents of COMMANDS.BAT
ECHO HELLO & ::1
ECHO HOLA & ::2
ECHO KONICHIWA & ::3
ECHO ANYONGHASEYO & ::4
ECHO BONJOUR & ::5

REM Command to perform ECHO KONICHIWA out of COMMANDS.BAT
CALL C:\COMMANDS.BAT | FIND "3"
person Anthony Miller    schedule 15.09.2011
comment
Замечательная идея! Я добавлю еще один ответ, аналогичный тому, что вы сделали. - person adarshr; 16.09.2011

А еще лучше, вчера я обнаружил это, играя с ним:

REM Contents of COMMANDS.BAT
ECHO HELLO & ::1
ECHO HOLA & ::2
ECHO KONICHIWA & ::3
ECHO ANYONGHASEYO & ::4
ECHO BONJOUR & ::5

-

REM Command to perform ECHO KONICHIWA out of COMMANDS.BAT
FINDSTR ::3 COMMANDS.BAT | START /B

Таким образом, мне не нужно выводить строку в другой файл bat, он просто мгновенно запускает команду.

person Anthony Miller    schedule 16.09.2011

Это похоже на Mechaflash, но использует findstr вместо find.

master.bat

echo abcd &rem line1
echo hello &rem line2
echo notepad &rem line3
echo public &rem line4
echo wind &rem line5
echo balance &rem line5

command.bat

@echo off

findstr line%1 master.bat > temp.bat & temp.bat
person adarshr    schedule 16.09.2011