すべて
私はここで.BATファイルを取り扱おうとしています。それは非常に単純なスクリプトであるべきですが、そのやり方がわかりません(私は慣れていません)。
私がやろうとしているのは、新しいコマンドウィンドウを開くことです。start%windir%\ system32\cmd.exe
そして、私がその後ろにタイプしたコード(例えば印刷)はそこに現れるべきです:echo "test in new window"
これどうやってするの?
だから私は新しいコマンドウィンドウでいくつかのコーディングをする必要があります。誰かがこれを手伝ってくれる?
敬具
それはあなたが尋ねた少し前の時間だったので、あなたはすでにあなたの答えを見つけるかもしれません。しかし、私はrorをコーディングするときに同様のことをやろうとしました。新しいcmdウィンドウで「Railsサーバー」を実行したいので、新しいcmdを開いてから再びパスを見つける必要はありません。
私が見つけたのはこのようにKスイッチを使うことでした:
start cmd /k echo Hello, World!
"cmd"が新しいウィンドウでアプリケーションを開く前に開始し、 "/ K"が "echo Hello、World!"を実行します。新しいcmdが起動した後。
/ Cスイッチを似たようなものに使用することもできます。
start cmd /C pause
これで「一時停止」が実行されますが、コマンドが完了したらウィンドウを閉じます。あなたがボタンを押した後この場合。私はこれが "Railsサーバー"には便利だと思ったので、開発サーバーをシャットダウンしてもウィンドウを閉じる必要はありません。
バッチファイルで次のものを使用します。
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""
これはそれほど簡単ではありません。
最善の方法は、スクリプトの中で実行したい部分を別の.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%"
明らかにこれは些細な例です。
Stack Overflowの皆さん、ありがとうございます。このソリューションは上記の問題を解決しますが、これらのタスクを自動的に実行するように拡張されています。
私のプロジェクトは "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で開いたままにします。
楽しい。
上記の答えは私を助けました。しかし、それでもいくらかの計算が必要でした。これは私が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"
私があなたが正しくこれをサイドで行うことを理解しているならば、あなたのbatファイルはコマンドプロンプトを開き、スクリーンにあなたのメッセージを印刷するでしょう。
cmd.exe hello world
お役に立てれば。
ファイル名にスペースを入れて、新しいcmdウィンドウでpythonファイルを実行します。
start cmd.exe /k python "C:\Program Files\HelloWorld.py"
追加/k
2つのコマンド間両方のコマンドin order
を実行.
例:
cmd /k echo "hello"
このコマンドは、最初にcommand Prompt
を開き、次にecho "hello"
コマンドを実行します