2012-01-22 24 views
1

別のバッチファイル内のバッチファイルでコマンドを実行する方法......別のバッチファイル内にあるバッチファイルでコマンドを実行する

コマンドを別のコンソールで実行しようとしていますコマンドプロンプトをバッチファイルで実行できませんでした。他のコンソールをバッチファイルで起動できますが、コマンドを渡すことはできません。

+2

あなたはすでに持っているものを表示できます – L7ColWinters

答えて

0

あなたは呼び出し文を試みることができる:

コールbatchname.bat

が、これは、現在開いているプロンプト

+0

応答ありがとうございました.........他のバッチファイルを開始できますが、親バッチファイルでコマンドを渡すことができません。子バッチファイルをその新しいコンソールに起動した後です。私の必要条件は、新しいバッチファイルから新しいコンソールにコマンドを渡すことです。 – Sampath

3

に指定されたバッチファイルを実行します質問の私の最初の解釈があることを信じるように私を導きましたSampathは2つのコマンドセットを持つ1つのバッチスクリプトが必要でした。これを呼び出すと、親ウィンドウ内で第1のコマンドセットが実行され、第2のコマンドセットで同じスクリプトが実行される第2のウィンドウが開きます。

"%〜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という2つのスクリプトで行うことができます。

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 
+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で、私が作成し、そのスニペットを使用したいです日付形式...

CALL MASTER_BAT.BAT "GET_CURRENT_DATE" 
ECHO %mdy% 
PAUSE 

CHILD_BAT.BATのためのあなたの出力は次のようになります:

また
1-23-12 
Press any key to continue... 

、任意の私はmm/dd/yy形式で現在の日付で日付を呼び出すことができるようにそれを作りたいと言うことができますCALLコマンドの前にCHILD_BAT.BATで作成された変数は、MASTER_BAT.BATスクリプトにも渡されます。ただし、forループの場合は、CALLを含むため、forループの一時変数は渡されません。

希望すると便利です。

EDIT:私のスニペットは米国の日付形式で使用できることに注意してください。

関連する問題