BATファイル:新しいcmdウィンドウを開き、そこでコマンドを実行します


163

私はBATファイルで新しいコマンドウィンドウを開こうとしています:

start %windir%\system32\cmd.exe

開いたら、新しいウィンドウでBATコマンドを実行します。

echo "test in new window"

これどうやってするの?

回答:


263

あなたが尋ねたのは少し前のことなので、あなたはすでにあなたの答えを見つけるかもしれません。しかし、私はrorをコーディングするときに同様のことをしようとしました。新しいcmdウィンドウで「rails server」を実行したかったので、新しいcmdを開いてパスを再度見つける必要はありません。

私が見つけたのは、次のようにKスイッチを使用することでした。

start cmd /k echo Hello, World!

「cmd」が新しいウィンドウでアプリケーションを開き、「/ K」が「echo Hello、World!」を実行する前に開始します。新しいコマンドが起動した後。

/ Cスイッチを同様の目的で使用することもできます。

start cmd /C pause

これにより「一時停止」が実行されますが、コマンドが完了するとウィンドウが閉じます。この場合、ボタンを押した後。これは「railsサーバー」に便利で、開発サーバーをシャットダウンするときにウィンドウを閉じる必要はありません。


2
これを使用してRailsサーバーを実行している場合は、実際にを入力する必要はありませんcmd。入力するだけですstart rails s
fbonetti 2013年

86

バッチファイルで以下を使用します。

start cmd.exe /k "more-batch-commands-here"

または

start cmd.exe /c "more-batch-commands-here"

/ c文字列で指定されたコマンドを実行してから終了します
/ k文字列で指定されたコマンドを実行しますが、残ります

詳細については、cmd.exeのドキュメントをcmd /?参照してください。

コマンド文字列の適切なフォーマットは、引数にスペースが含まれるため、少し複雑になります。以下の例を参照してください。いくつかの例では、ネストされた二重引用符の使用に注意してください。

例:

プログラムを実行し、ファイル名パラメーターを渡します。
CMD /c write.exe c:\docs\sample.txt

プログラムを実行し、長いファイル名を渡します。
CMD /c write.exe "c:\sample documents\sample.txt"

プログラムパスのスペース:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""

プログラムパス内のスペース+パラメータ:
CMD /c ""c:\Program Files\demo.cmd"" Parameter1 Param2
CMD /k ""c:\batch files\demo.cmd" "Parameter 1 with space" "Parameter2 with space""

demo1とdemo2を起動します。
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""

出典: http : //ss64.com/nt/cmd.html


13

これは簡単なことではありません。

最善の方法は、「新しいウィンドウ」で実行するスクリプトの一部を別の.batファイルに含めることです。たとえば、スクリプトの残りの部分(変数など)から多くの状態を必要とする場合、これは非現実的かもしれません。1つのオプションは、必要な値(たとえば、操作するdir)をバッチファイルに渡すことです。

start cmd.exe stuff.bat %this_dir%

送信する状態が大量にある場合は、実行時にバッチファイルを生成することを検討してください。

set foo=Hello, World
set list_me=%userprofile%

set tmpdir=c:\windows\temp
set tmp=%tmpdir%\tmp.foo

del /q /f "%tmp%"

echo.echo %foo%>>"%tmp%"
echo.dir "%list_me%">>>"%tmp"

start cmd.exe "%tmp%"

del /q /f "%tmp%"

明らかにこれは些細な例です。


11

上記の答えは私を助けました。しかし、それでもいくつかの理解が必要でした。これは、Web開発の3つのプロセスを開始するために使用するスクリプトの例です。継続的に実行する必要があるため、3つのウィンドウが開いたままになります。

Mongoは私のパスにグローバルに追加されるので、他の2つのプログラムの場合のようにcdする必要はありません。もちろん、ファイルへのパスはさまざまですが、うまくいけばこれが役立つでしょう。

:: Start MongoDB
start cmd.exe /k "mongod"

:: cd app directory, and start it
cd my-app
start cmd.exe /k "npm run dev"

:: cd to api server, and start that
cd ../my-app-api
start cmd.exe /k "npm run dev"

7

ここStack Overflowに感謝します。このソリューションは上記の問題を解決しますが、これらのタスクを自動的に実行するように拡張されています。

  1. Railsサーバーを実行したい
  2. レーキジョブを実行します。私のdelay_job gemのワーカー
  3. デフォルトのインターネットブラウザを開いてページを表示する
  4. 最後に、するままにCMDウィンドウを私のセッション中に余分なコマンドのために開きました。

私のプロジェクトは「アンチクォーラム」と呼ばれていると思います。

作成「init.bat」あなたの中のファイル%USERPROFILEのの%の(オープンディレクトリをCMDウィンドウをし、%USERPROFILE%が何であるかを知るために、カーソルの左側のパスを見てみましょう)

@echo off
cd C:/projects/rails3/antiquorum
if "%1" == "antiquorum" GOTO start
if "%1" == "worker" GOTO worker
if "%1" == "server" GOTO server
if "%1" == "" GOTO end
:start
    start cmd /k %USERPROFILE%\init.bat worker
    start cmd /k %USERPROFILE%\init.bat server
    TIMEOUT 30
    start "" "http://localhost:3000/"
    GOTO end
:server
    rails s
    GOTO end
:worker
    rake jobs:work
:end

新しいコマンドラインウィンドウで次のように入力します 。C:> init antiquorum

コードは、さらに2つのcmdウィンドウとブラウザを開きます。TIMEOUTは、ブラウザーのエラーを回避します

:スタートセクションは、作業を行います。paramsをserverworker、またはnoneと入力してタスク1、2、または4を個別に実行し、「antiquorum」プロジェクトのルートでコマンドを開いたままにすることができます。

楽しい。


2

私がこれを正しく行うことを理解している場合、batファイルはコマンドプロンプトを開き、メッセージを画面に出力します。

cmd.exe hello world

お役に立てれば。


2

ファイル名にスペースを含む新しいcmdウィンドウでpythonファイルを実行するには:

start cmd.exe /k python "C:\Program Files\HelloWorld.py"

0

2つのコマンドの間に追加すると、両方のコマンドが実行されます/k in order

例:

cmd /k echo "hello"

このコマンドは最初に開きcommand prompt、次にecho "hello"コマンドを実行します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.