2012-01-22 83 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循環臨時變量。

希望這是有幫助的。

編輯:請注意,我的代碼段可用於美國日期格式。