web-dev-qa-db-ja.com

BATファイル:新しいcmdウィンドウを開き、そこにコードを入力してください

すべて

私はここで.BATファイルを取り扱おうとしています。それは非常に単純なスクリプトであるべきですが、そのやり方がわかりません(私は慣れていません)。

私がやろうとしているのは、新しいコマンドウィンドウを開くことです。start%windir%\ system32\cmd.exe

そして、私がその後ろにタイプしたコード(例えば印刷)はそこに現れるべきです:echo "test in new window"

これどうやってするの?

だから私は新しいコマンドウィンドウでいくつかのコーディングをする必要があります。誰かがこれを手伝ってくれる?

敬具

133
Tjekkles

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

私が見つけたのはこのようにKスイッチを使うことでした:

start cmd /k echo Hello, World!

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

/ Cスイッチを似たようなものに使用することもできます。

start cmd /C pause

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

217
aross

バッチファイルで次のものを使用します。

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

または

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

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

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

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

例:

プログラムを実行してfilenameパラメータを渡します。
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

70
Shannon

これはそれほど簡単ではありません。

最善の方法は、スクリプトの中で実行したい部分を別の.batファイルにすることです。例えば、これは実用的ではないかもしれません。スクリプトの他の部分(変数など)から多くの状態が必要です。 1つの選択肢はあなたが必要とする値(例えば操作するディレクトリ)をバッチファイルに渡すことです:

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
Sorpigal

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

  1. Railsサーバーを実行したい
  2. rakeジョブを実行します:worker 私のdelayed_job gemにも
  3. デフォルトのインターネットブラウザを開いて/ - 自分のページを表示します
  4. 最後に、a cmd window を開いて、私のセッション中に余分なコマンドがあれば開いてください。

私のプロジェクトは "antiquorum"と呼ばれていると思います。

%USERPROFILE% ディレクトリに "init.bat" ファイルを作成します( 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 _ はブラウザのエラーを回避します。

:start セクションがその仕事をします。 paramsに server worker 、noneと入力すると、タスク1、2、4を個別に実行できます。cmdを root of "antiquorum" projectで開いたままにします。

楽しい。

5
Fer Padron

上記の答えは私を助けました。しかし、それでもいくらかの計算が必要でした。これは私が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"
5
Dan Zuzevich

私があなたが正しくこれをサイドで行うことを理解しているならば、あなたのbatファイルはコマンドプロンプトを開き、スクリーンにあなたのメッセージを印刷するでしょう。

cmd.exe hello world

お役に立てれば。

2
Chris Derry

ファイル名にスペースを入れて、新しいcmdウィンドウでpythonファイルを実行します。

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

追加/k2つのコマンド間両方のコマンドin orderを実行.

例:

cmd /k echo "hello"

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

0
Vicky Salunkhe