批处理脚本 - 调用另一个批处理脚本来执行某个命令行

3

可以创建一个批处理文件,其中包含一系列命令吗 (commands.bat)?

ECHO HELLO
ECHO HOLA
ECHO KONICHIWA
ECHO ANYONGHASEYO
ECHO BONJOUR

在一个批处理文件中,使用CALL commands.bat命令,而不知道第2行或第4行的内容,如何只执行第2行或第4行的命令?


是的,让 echo Holaecho Bonjour 有条件地执行,取决于特定的参数,并在调用 commands.bat 时传入该参数。 - adarshr
http://commandwindows.com/batchfiles-branching.htm - sehe
修改了我的问题。遗漏了一个重要的细节:按行号调用它们,而不是按其字符串包含的内容。 - Anthony Miller
@sehe,即使是原始问题,我也不确定你想指向什么。 - Anthony Miller
@Mechaflash 你可以这样做。创建一个主 commands.bat 文件,其中只包含 echo 语句列表。根据您可能收到的行号(或范围),将从该行号到文件末尾的内容复制到单独的文件 temp.bat 中并执行它。 - adarshr
5个回答

2

以下是我在评论中的意思。

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 0command.bat 3等命令来运行上述内容。


1
如果你只想执行第n行而不是从n到EOF,你可能需要查看https://dev59.com/UFjUa4cB1Zd3GeqPRGzJ,并结合我的答案来获得你想要的结果。 - adarshr
我将使用您链接帖子中Jeb的答案。正在设置答案。 - Anthony Miller

1

我曾经知道的一个小技巧(当批处理文件很流行的时候)

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:\>

1

对此解决方案给我你的意见。它有效果,但是我知道有些人不喜欢将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"

这是个好主意!我会添加另一个答案,与你所做的类似。 - adarshr

1
更好的是,昨天我玩弄它时发现了这个:
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

这样我就不必将该行输出到另一个批处理文件中,它会立即运行命令。


0
这与Mechaflash's的答案类似,但是使用了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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接