在另一个批处理文件中的批处理文件中运行命令

时间:2012-01-22 03:40:55

标签: batch-file

如何在另一个批处理文件中的批处理文件中运行命令......

我正在尝试在批处理文件中的命令提示符以外的其他控制台中运行命令但是无法执行此操作。我能够在批处理文件中启动其他控制台但无法将命令传递给它。

3 个答案:

答案 0 :(得分:3)

我对这个问题的第一个解释让我相信Sampath想要一个有两组命令的批处理脚本。调用它将在父窗口中运行第一组命令,并打开第二个窗口,该窗口将使用第二组命令运行相同的脚本。

"%〜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

Andriy M建议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

答案 1 :(得分:0)

你可以尝试一个电话声明:

致电batchname.bat

这将在当前打开的提示符

中运行指定的批处理文件

答案 2 :(得分:0)

几乎听起来你想要的是一个包含你想要运行的命令的文件,并且在你想要的时候使用批处理脚本来调用这些命令?

我已经通过创建一个批处理文件来实现这一点,该文件包含我认为有用的所有命令(代码片段),然后使用我的其他批处理脚本调用我的代码段的“主”文件。

例如,在我的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中,我想使用该代码片段来创建日期格式...让我说我想这样做,以便我可以按当前日期调用日期,单位为mm / dd / yy格式:

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循环变量。

希望这有用。

编辑:请注意,我的代码段可用于美国日期格式。