Batch Script - вызов другого пакетного сценария для вызова линии для выполнения определенной команды. - PullRequest
3 голосов
/ 15 сентября 2011

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

ECHO HELLO
ECHO HOLA
ECHO KONICHIWA
ECHO ANYONGHASEYO
ECHO BONJOUR

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

Ответы [ 5 ]

2 голосов
/ 15 сентября 2011

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

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.

1 голос
/ 16 сентября 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, он просто запускает команду мгновенно.

1 голос
/ 15 сентября 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"
1 голос
/ 15 сентября 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 HELLO

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:\>
0 голосов
/ 16 сентября 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
...