从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口

Posted

技术标签:

【中文标题】从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口【英文标题】:Create a new cmd.exe window from within another cmd.exe prompt 【发布时间】:2022-01-20 00:52:03 【问题描述】:

我正在设置 CruiseControl.NET。我遇到的问题是我将 CC 作为控制台应用程序运行,当我的构建成功完成并执行(使用 exec)时,它会在 CruiseControl DOS 提示符下启动它。我只是使用简单的批处理文件来启动我的应用程序,但让它在与 CC 相同的提示符下运行导致 CC 认为只要我的应用程序运行,构建就会继续。

cmd.exe 的命令行参数是否会生成另一个单独的提示窗口?

【问题讨论】:

cmd.exe 是 CUI shell,而不是 GUI。它不会创建窗口。它使用由控制台主机进程 conhost.exe 的实例创建和管理的控制台窗口。如果 CUI 程序正常启动,则基本客户端 DLL(kernel32.dll 或 kernelbase.dll)中的初始化代码会继承父控制台(如果有)或分配新控制台,除非它以创建标志 DETACHED_PROCESS 启动(即没有控制台)。如果它以创建标志 CREATE_NEW_CONSOLE 开始(正如 CMD 的 start 使用的那样),则基本 DLL 总是分配一个新的控制台,而不是继承父级的。 【参考方案1】:

我认为这可行:

start cmd.exe

【讨论】:

确保你检查了所有不同的启动选项“开始/?” /wait 和 /I 可以派上用场。 fwiw,您甚至不必在启动后放置“cmd.exe”。只要“开始”这个词就可以了。 start /d 对于那些想要为新的 cmd 窗口设置路径的人。 Here详细说明。【参考方案2】:

这是您需要的代码:

start cmd.exe @cmd /k "Command"

【讨论】:

@cmd 在做什么?有相关文档吗? @ 抑制直接输出,通常会显示在提示符中,但命令仍会执行。 我用过这个,它可以工作,但是如果尝试通过键盘中断ctrl+c杀死正在运行的程序,运行程序不会停止。它只会在您关闭新打开的命令提示符窗口时停止。 不适用于使用^ 的多行命令。 :( 有什么办法解决这个问题?【参考方案3】:

只需在命令提示符中输入start

start

这将打开新的cmd 窗口。

【讨论】:

【参考方案4】:
start cmd.exe 

打开一个单独的窗口

start file.cmd 

打开批处理文件并在另一个命令提示符中执行它

【讨论】:

【参考方案5】:

您可以在命令提示符下键入以下 3 个命令:

    start

    start cmd

    start cmd.exe

【讨论】:

【参考方案6】:
START "notepad.exe"
echo Will launch the notepad.exe application
PAUSE

要制作任何 cmd 文件类型,只需将内容保存为 .bat,即

@echo
TITLE example.bat
PAUSE
taskkill/IM cmd.exe

将其制作成“example.bat”文件,保存,然后打开并运行。

【讨论】:

【参考方案7】:

简单的写入你的bat文件

@cmd

@cmd /k "command1&command2"

【讨论】:

感谢& 在新提示中执行多个命令。我喜欢添加exit,以便在命令运行完成后关闭提示。【参考方案8】:

如果我们简单地使用start 命令或start cmd.exe 它会打开cmd。

如果要打开同一个命令提示符窗口;

start "Command Prompt"

【讨论】:

【参考方案9】:

我还尝试在 CCNET 任务结束时执行运行守护进程/服务器的批处理文件; 使 CruiseControl 生成一个独立的异步进程而不等待进程结束的唯一方法是:

    创建一个批处理文件来运行守护进程(服务器应用程序)

    使用任务调度程序将批处理文件作为 CCNET 任务运行(使用 schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    08:50 是 HH:MM 时间格式

你可能需要在启动 ccnet 时终止进程

PS:使用“start cmd.exe”选择的答案不起作用;确实生成了一个新的命令提示符,但 CCNET 将等待生成的 cmd 完成。

【讨论】:

以上是关于从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口的主要内容,如果未能解决你的问题,请参考以下文章

创建在所选目录中打开的命令提示符进程

Durandal:在一个孩子中创建功能并从另一个孩子中消费

从另一个 UIViewController 的 .xib 文件在 ViewController.h 中创建 IBOutlets

从另一个类模块引用在 main 中创建的类的实例

我可以从另一个数据库服务器在我的数据库服务器中创建视图吗

选择一个 Mat 的子集并复制它们以在 C++/Opencv 中创建一个新的 mat