2016-09-06 9 views
1

タスクを頻繁に繰り返さないようにするため、バッチファイルを設定しています(WINDOWS 10)。いくつかのCMD PROMPTを特定のディレクトリに開き、コマンドを起動します。バッチウィンドウコマンドはプロンプトに書き込まれましたが実行されません。

1つのケースでは、CMD PROMPTを開き、特定のディレクトリに移動して、PROMPTを起動せずにCOMMANDを設定する必要があります。その後、私は後でしたいときは必ずそのコマンドを起動するためにENTERをクリックしなければなりません。それは、コマンド "コルドバは、Androidビルド" 起動このコードの

setlocal ENABLEEXTENSIONS 
set CordovaProjPath="C:\MyPath\" 
start cmd /k "cd /d %CordovaProjPath% && cordova build android" 

は、ここに私のコードです。

私はそれが私とPROMPT与えstart cmd /k "cd /d %JCACordovaProjPath%の代わりstart cmd /k "cd /d %JCACordovaProjPath% && cordova build android"で行く場合:「C:\ MYPATH>」を、私が書きたいのですが:コマンドを起動することなく、その背後に「コルドバは、Androidの構築」。

このような

答えて

1

は繰り返し実行を提供するために(コメントで述べたように)関連するコマンドを「終了」オプション付きのループに入れることができます。

@Echo Off 
    setlocal 
    Set "CordovaProjPath=C:\MyPath" 
    Set "CommandToRun=cordova build android" 
:loop 
    Cd /D %CordovaProjPath% 
    Echo %CommandToRun% 
    set QUIT= 
    set /p QUIT=Press ENTER to run command or 'Q' to quit: 
    if /i "%QUIT%" == "Q" goto :eof 
    %CommandToRun% 
    goto :loop 

元のコマンドとは異なり、これは繰り返しコマンドと同じコマンドウィンドウでターゲットコマンドを実行します。問題のコマンドに応じて、これはより魅力的かもしれません(ウィンドウのポップアップが少ない)。ただし、コマンドによっては、メインウィンドウを閉じることがあります。この場合、2つの異なる方法のいずれかで、独自のウィンドウでコマンドを実行することに戻すことができます。それぞれのケースで、行を置き換えます - これをターゲットコマンドが実行された後に自身のウィンドウで

... 
    %CommandToRun% 
    ... 

ファイル名を指定して実行/kを使用して

... 
    start "%CommandToRun%" /wait cmd /k %CommandToRun% 
    ... 

開いたまま、オープンコマンドプロンプトウィンドウを残しますコマンドの出力を見る必要があり、独自の一時停止がない場合は、適切である可能性があります。ターゲットコマンドが実行された後に終了しますコマンド・プロンプトを意味します/cを使用して

... 
    start "%CommandToRun%" /wait cmd /c %CommandToRun% 
    ... 

閉じ独自のウィンドウで

を実行します。これは、コマンドの出力を見る必要がない場合、または独自の一時停止がある場合には適切です。

+0

あなたの答えに関するいくつかのフィードバック:最初のケース(最後から2行目の '%CommandToRun%'(CTR)だけ)では、プログラムの実行が終了すると終了します。 2番目のケースでは、 'start%CTR%/ wait cmd/k%CTR%'を 'start%CTR%/ wait cmd/c%CTR%'に置き換えても問題ありません。あなたのご意見ありがとうございます。あなたの答えを編集すれば、それを正しいものとして検証します。 – nyluje

+0

@nylujeフィードバックに感謝します。私は '/ c'に言及することを考えましたが、もともと'/k'を使っていたので、私は気にしませんでした。 – TripeHound

1

しまうの何かがあなたの操作を行います。以下は

@Echo Off 
Set "CordovaProjPath=C:\MyPath" 
Set "CommandToRun=cordova build android" 
Start "%CommandToRun%" Cmd /K "Cd /D %CordovaProjPath%&Echo %CommandToRun%&Pause>Nul&%CommandToRun%" 

があなたの代わりの二重引用符の方法を可能にしてもよい代替です:

@Echo Off 
Set CordovaProjPath="C:\MyPath" 
Set CommandToRun="cordova build android" 
Start %CommandToRun% Cmd /K "(Cd /D %CordovaProjPath%)&(Echo %CommandToRun%)&(Pause>Nul)&(%CommandToRun%)" 
+0

これは仕事です(CLIモードのように、プロンプトで一度実行すると、矢印キーを押してコマンドを呼び戻すことができましたが、それは私の質問では指定されていません)。私はあなたが 'Echo CommandToRun%'のCommandToRunの前に%を見逃していると思います。それを修正して、あなたの答えを検証します(6文字分を編集する必要があるため、自分で編集できませんでした)。また、 '' CommandToRun = cordova build android "を' 'CommandToRun =" cordova build android "'に変更しようとした場合、これはうまくいきません。 – nyluje

+0

'Start'コマンドの上に':loop'を追加し、その下に 'goto:loop'を追加することができます。Enterを押すたびにコマンドを実行するように繰り返しプロンプトを表示します(Ctrl + Cで停止します)。巧妙にするには、 'SET/P'コマンド(' SET /? 'を見てください)を見て値を読んで、Ctrl-Cを使わずに条件付きでループバックしてください。 Re。最後の部分 - 「もし私が変えようとしたら... _なぜあなたはそれが働いていればそれを変えるのですか?使用される形式は、スペースを含む値を格納することができますが、その周りには '' ... "'を格納しません。あなたが試しているフォームはダブルクォートを格納しています.../cont – TripeHound

+0

...二つのパラメータを持つコマンド 'cordova'ではなく、スペースを埋め込んだコマンド(' cordova build android')を探しているので、ビルドとアンドロイド)。 – TripeHound

関連する問題