BAT file: Open new cmd window and enter code in th

2019-01-08 04:18发布

All

I'm trying to work with a .BAT file here, it should be a very simple script but I don't know how to do it (I'm not familiar with it).

What I'm trying to do is open a new command window: start %windir%\system32\cmd.exe

And the code that I type behind it (a print for example) should show up in there: echo "test in new window"

How can I do this?

So I need do to some coding in a NEW command window. Can anyone help me on this?

Kind regards

6条回答
混吃等死
2楼-- · 2019-01-08 04:26

If I understand you correctly doing this in side your bat file will open Command prompt and print your message to screen.

cmd.exe hello world

hope this helps.

查看更多
在下西门庆
3楼-- · 2019-01-08 04:31

The above answers helped me. But still required some figuring out. Here is an example script I use to start 3 processes for web development. It results in 3 windows staying open, as they need to run continously.

Mongo is globally added to my path, so I don't need to cd like I do for the other two programs. Of course the path to your files will vary, but hopefully this will help.

:: 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"
查看更多
乱世女痞
4楼-- · 2019-01-08 04:36

Use the following in your batch file:

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

or

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

/c Carries out the command specified by string and then terminates
/k Carries out the command specified by string but remains

Consult the cmd.exe documentation using cmd /? for more details.

The proper formating of the command string gets a little more complicated with spaces in the arguments. See the examples below. Note the use of nested double quotes in some examples.

Examples:

Run a program and pass a filename parameter:
CMD /c write.exe c:\docs\sample.txt

Run a program and pass a long filename:
CMD /c write.exe "c:\sample documents\sample.txt"

Spaces in program path:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""

Spaces in program path + parameters:
CMD /c ""c:\Program Files\demo.cmd"" Parameter1 Param2
CMD /k ""c:\batch files\demo.cmd" "Parameter 1 with space" "Parameter2 with space""

Launch demo1 and demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""

Source: http://ss64.com/nt/cmd.html

查看更多
姐就是有狂的资本
5楼-- · 2019-01-08 04:45

Thanks to all here in Stack Overflow; this solution solves the above question but is extended to automatically run these tasks:

  1. I want to run my rails server
  2. Run a rake jobs:worker for my delayed_job gem too
  3. and Open default internet browser to show my page
  4. finally, to leave a cmd window open for any extra commands during my session.

I guess my project is called "antiquorum."

Create an "init.bat" file in your %USERPROFILE% directory (open a cmd window and take a look at the path to the left of the cursor to know what %USERPROFILE% is)

@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

In a new command line window type: C:> init antiquorum

The code opens two more cmd windows and a browser. TIMEOUT avoids errors in the browser.

The :start section does the work. You can run tasks 1,2 or 4 separately by typing params as: server, worker, or none to leave a cmd opened in root of "antiquorum" project.

Enjoy.

查看更多
走好不送
6楼-- · 2019-01-08 04:47

This is not very easy.

The best approach is to have the part of your script that you want to be executed in a "new window" to be in a separate .bat file. This might be impractical if e.g. you need a lot of state from the rest of your script (variables, etc). One option is to pass any values you need (e.g. dir to operate in) to the batch file:

start cmd.exe stuff.bat %this_dir%

If you have a large amount of state to transmit you might consider generating a batch file at runtime:

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%"

Obviously this is a trivial example.

查看更多
Melony?
7楼-- · 2019-01-08 04:51

You may already find your answer because it was some time ago you asked. But I tried to do something similar when coding ror. I wanted to run "rails server" in a new cmd window so I don't have to open a new cmd and then find my path again.

What I found out was to use the K switch like this:

start cmd /k echo Hello, World!

start before "cmd" will open the application in a new window and "/K" will execute "echo Hello, World!" after the new cmd is up.

You can also use the /C switch for something similar.

start cmd /C pause

This will then execute "pause" but close the window when the command is done. In this case after you pressed a button. I found this useful for "rails server", then when I shutdown my dev server I don't have to close the window after.

查看更多
登录 后发表回答