BAT文件:打开新的cmd窗口并在其中输入代码

Tje*_*les 146 command-line batch-file

所有

我在这里尝试使用.BAT文件,它应该是一个非常简单的脚本,但我不知道该怎么做(我不熟悉它).

我要做的是打开一个新的命令窗口:启动%windir%\ system32\cmd.exe

我在它后面输入的代码(例如打印)应该显示在那里:echo"在新窗口中测试"

我怎样才能做到这一点?

所以我需要在新的命令窗口中进行一些编码.谁可以帮我这个事?

亲切的问候

aro*_*oss 241

你可能已经找到了答案,因为那是你前一段时间问的.但是我在编写ror时尝试做类似的事情.我想在新的cmd窗口中运行"rails server",这样我就不必再打开一个新的cmd,然后再找到我的路径.

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

start cmd /k echo Hello, World!
Run Code Online (Sandbox Code Playgroud)

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

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

start cmd /C pause
Run Code Online (Sandbox Code Playgroud)

然后执行"暂停",但在命令完成时关闭窗口.在这种情况下,按下按钮后.我发现这对"rails服务器"很有用,然后当我关闭我的开发服务器时,我不必关闭窗口.

  • 就像我用来记住区别的注释一样,/k 代表“保留”,/c 代表“关闭” (8认同)
  • 如果您使用它来运行Rails服务器,则实际上无需键入`cmd`。您可以只输入`start rails'。 (2认同)
  • 有关这些交换机的更多信息,请访问:http://ss64.com/nt/cmd.html (2认同)
  • @aross谢谢你的工作.我可以将X,Y位置给开窗口吗? (2认同)

Sha*_*ews 75

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

start cmd.exe /k "more-batch-commands-here"
Run Code Online (Sandbox Code Playgroud)

要么

start cmd.exe /c "more-batch-commands-here"
Run Code Online (Sandbox Code Playgroud)

/ c执行string指定的命令,然后终止
/k执行string指定的命令但仍然存在

有关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


Sor*_*gal 12

这不是很容易.

最好的方法是让您希望在"新窗口"中执行的脚本部分位于单独的.bat文件中.如果您需要从脚本的其余部分(变量等)获得大量状态,这可能是不切实际的.一种选择是将所需的任何值(例如dir进行操作)传递给批处理文件:

start cmd.exe stuff.bat %this_dir%
Run Code Online (Sandbox Code Playgroud)

如果要传输大量状态,可以考虑在运行时生成批处理文件:

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%"
Run Code Online (Sandbox Code Playgroud)

显然这是一个微不足道的例子.


Dan*_*ich 8

以上答案对我有帮助.但仍需要一些搞清楚.这是一个用于启动Web开发的3个进程的示例脚本.它导致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"
Run Code Online (Sandbox Code Playgroud)


Fer*_*ron 6

感谢Stack Overflow中的所有内容; 此解决方案解决了上述问题,但扩展为自动运行以下任务:

  1. 我想运行我的rails服务器
  2. 运行rake jobs:我的delayed_job gem的worker也是
  3. 并打开默认的互联网浏览器以显示我的页面
  4. 最后,留下一个cmd窗口我的会话过程中打开的任何额外的命令.

我想我的项目叫做"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
Run Code Online (Sandbox Code Playgroud)

在新的命令行窗口中键入: C:> init antiquorum

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

:开始部分做的工作.您可以通过键入params来分别运行任务1,2或4:server,worker或none,以便在"antiquorum"项目的根目录中打开cmd .

请享用.