2012-01-22 225 views
1

如何运行一个批处理文件,该文件是内部的另一个批处理文件命令运行命令......在批处理文件,该文件是另一个批处理文件里面

我想比其他不同的控制台运行的命令命令提示符在一个批处理文件中但不能这样做。我能够在批处理文件中启动另一个控制台,但无法将命令传递给它。

+2

你能告诉我你已经得到了什么 – L7ColWinters

回答

0

你可以尝试调用语句:

呼叫batchname.bat

这将运行在当前打开的提示

+0

谢谢大家的回复.........问题是我能够启动另一个批处理文件但无法在父批处理文件中传递命令在启动子批处理文件到新的控制台之后......我的要求是将命令从父批处理文件传递到新控制台.....任何帮助都非常感谢........ – Sampath

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只是从标准输入读取命令并执行它们。 master.bat启动输入重定向到命令文件的从服务器,然后将命令追加到命令文件。

以下是master.bat的一个示例,演示了向从站发送dymamically命令。请注意,主设备会提示输入命令,但从设备窗口将具有焦点。确保您点击主人,以便您可以输入您选择的命令。

@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

OP的评论现在揭示了我的看法是错误的。尽管如果我能从他们的评论中正确地判断,但你的答案肯定更接近,但实际的目标是以某种方式将命令传递给已经运行的批处理脚本(我猜也可以在不同的控制台窗口中)。 –

+0

@AndriyM - 我想你可能是对的。我更新的答案解决您的解释。 – dbenham

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... 

此外,任何在CALL命令之前在CHILD_BAT.BAT中创建的变量也将传递给MASTER_BAT.BAT脚本。但是,包含CALL的循环交互不会传递for循环临时变量。

希望这是有帮助的。

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

相关问题