【问题标题】:BAT file: Open new cmd window and execute a command in thereBAT 文件:打开新的 cmd 窗口并在其中执行命令
【发布时间】:2012-03-12 16:01:05
【问题描述】:

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

start %windir%\system32\cmd.exe

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

echo "test in new window"

我该怎么做?

【问题讨论】:

    标签: batch-file command-line


    【解决方案1】:

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

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

    start cmd.exe /k "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

    【讨论】:

      【解决方案2】:

      我希望我的窗口在我杀死或重新启动 Firebase 后保持打开状态,因此我使用了两个批处理文件。

      桌面文件方便访问:run_firebase.bat:

      --------------START FILE CONTENTS--------------
      
      start cmd /k C:\dev\init_firebase_batch.bat
      
      ---------------END FILE CONTENTS---------------
      

      运行预期结果的批处理文件:C:\dev\init_firebase_batch.bat

      --------------START FILE CONTENTS--------------
      
      cd C:\dev\aptr_datasync\aperture-customer-hub
      firebase emulators:start
      
      ---------------END FILE CONTENTS---------------
      

      所以...双击run_firebase.bat,它会运行第二批。在 Ctrl+C 退出我的进程后,窗口保持打开状态。看起来微不足道,但我不喜欢在编写代码时分心。

      我只花时间解决,因为我认为这很简单。希望这能为其他人创造这种简单性。

      我认为这可以检查初始帖子中的问题:

      [x] 我正在尝试在 BAT 文件中打开一个新的命令窗口
      [x] 打开后,我想在新窗口中执行一个BAT命令

      【讨论】:

        【解决方案3】:

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

        例子:

        cmd /k echo "hello"
        

        这个命令会先打开command prompt再执行echo "hello"命令

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            以上答案对我有帮助。但仍然需要一些弄清楚。这是我用来启动 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"
            

            【讨论】:

              【解决方案6】:

              您可能已经找到了答案,因为这是您不久前提出的问题。但是我在编写 ror 时尝试做类似的事情。我想在新的 cmd 窗口中运行“rails server”,这样我就不必打开新的 cmd 然后再次找到我的路径。

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

              start cmd /k echo Hello, World!
              

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

              您也可以将 /C 开关用于类似的操作。

              start cmd /C pause
              

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

              【讨论】:

              • 如果你使用它来运行一个 Rails 服务器,你实际上不需要输入cmd。您只需输入start rails s
              【解决方案7】:

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

              cmd.exe hello world
              

              希望这会有所帮助。

              【讨论】:

                【解决方案8】:

                感谢 Stack Overflow 的所有人;此解决方案解决了上述问题,但扩展为自动运行这些任务:

                1. 我想运行我的 rails 服务器
                2. 也为我的 delay_job gem 运行 rake jobs: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
                

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

                代码会打开另外两个 cmd 窗口和一个浏览器。 TIMEOUT 避免浏览器出错。

                :start 部分完成了这项工作。 您可以通过键入参数分别运行任务 1、2 或 4:serverworker 或 none,以便在 root 中打开 cmd “antiquorum” 项目。

                享受吧。

                【讨论】:

                  【解决方案9】:

                  这并不容易。

                  最好的方法是将要在“新窗口”中执行的脚本部分放在单独的 .bat 文件中。如果例如,这可能是不切实际的。您需要脚本其余部分(变量等)的大量状态。一种选择是将您需要的任何值(例如操作的目录)传递给批处理文件:

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

                  显然这是一个简单的例子。

                  【讨论】:

                    猜你喜欢
                    • 2013-08-09
                    • 2021-07-16
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-10-20
                    • 1970-01-01
                    • 2013-07-31
                    相关资源
                    最近更新 更多