BAT文件:打开新的cmd窗口并在其中执行命令


163

我正在尝试在BAT文件中打开新的命令窗口:

start %windir%\system32\cmd.exe

打开后,我想在新窗口中执行BAT命令:

echo "test in new window"

我怎样才能做到这一点?

Answers:


263

您可能已经找到答案了,因为它是您询问的一段时间。但是我在编码ror时尝试做类似的事情。我想在新的cmd窗口中运行“ rails服务器”,所以我不必打开新的cmd,然后再次找到我的路径。

我发现是这样使用K开关的:

start cmd /k echo Hello, World!

在“ cmd”将在新窗口中打开应用程序之前启动,“ / K”将执行“ echo Hello,World!”。新的cmd启动后。

您也可以使用/ C开关进行类似操作。

start cmd /C pause

然后将执行“暂停”,但在完成命令后关闭窗口。在这种情况下,您按下按钮后。我发现这对于“ rails服务器”很有用,然后当我关闭开发服务器时,我不必在此之后关闭窗口。


2
如果您使用它来运行Rails服务器,则实际上无需键入cmd。您可以输入start rails s
fbonetti

86

在批处理文件中使用以下内容:

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

要么

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

/ c执行由字符串指定的命令,然后终止
/ k执行由字符串指定的命令,但保留

有关cmd /?更多详细信息,请查阅cmd.exe文档。

命令字符串的正确格式会因参数中的空格而变得有些复杂。请参阅下面的示例。注意在某些示例中嵌套双引号的使用。

例子:

运行程序并传递文件名参数:
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文件中。如果例如您需要脚本其余部分(变量等)的大量状态,则这可能不切实际。一种选择是将所需的任何值(例如,用于操作的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

以上答案对我有帮助。但是仍然需要弄清楚。这是我用来启动3个Web开发过程的示例脚本。这导致3个窗口保持打开状态,因为它们需要连续运行。

Mongo已全局添加到我的路径中,因此我不需要像其他两个程序一样进行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. 运行耙作业:工作人员对我的delayed_job的宝石太
  3. 并打开默认的互联网浏览器以显示我的页面
  4. 最后,留下一个cmd窗口我的会话过程中打开的任何额外的命令。

我想我的项目叫做“法定人数”。

%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

该代码将打开另外两个cmd窗口和一个浏览器。超时可以避免浏览器中的错误。

:开始部分做的工作。您可以通过将params输入为serverworker或none来分别运行任务1,2或4 ,以使cmd在“ antiquorum”项目的根目录中保持打开状态。

请享用。


2

如果我了解您在侧面正确执行此操作,则bat文件将打开命令提示符,并将消息打印到屏幕上。

cmd.exe hello world

希望这可以帮助。


2

在新的cmd窗口中运行python文件,文件名中带有空格:

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

0

在两个命令之间添加会执行两个命令/k in order

例:

cmd /k echo "hello"

该命令将首先打开command prompt然后执行echo "hello"命令

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.