Sk8*_*ter 60 windows command-line batch-file
我的问题是在 Windows 中,有些命令行窗口在执行后立即关闭。为了解决这个问题,我希望默认行为是窗口保持打开状态。通常,可以通过我想到的三种方法来避免这种行为:
pause在批处理程序后放一行提示用户在退出前按一个键net start xy在cmd.exe(开始 - 运行 - cmd.exe)中运行这些批处理文件或其他命令行操作工具(甚至服务启动、重启等或类似的东西)cmd /k像这样运行这些程序: cmd /k myprogram.bat但是还有一些其他情况用户:
我读过一篇关于更改cmd.exe显式打开时的默认行为的文章,创建了一个AutoRun 条目并在这些位置操作其内容:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor\AutoRun
Run Code Online (Sandbox Code Playgroud)
(自动运行项目是_String values_...)
我把它cmd /d /k作为一个值来试一试,但这根本没有改变上面提到的东西的行为......它只是在显式打开命令行窗口时改变了它的行为(开始-运行- cmd.exe)。
那么它是怎样工作的?你能给我任何解决这个问题的想法吗?
小智 29
我有一个只能应用于.cmd和.bat文件的解决方案:
打开regedit并转到以下各项:
[HKEY_CLASSES_ROOT\batfile\shell\open\command]
[HKEY_CLASSES_ROOT\cmdfile\shell\open\command]
Run Code Online (Sandbox Code Playgroud)
现在将“默认键值”更改为cmd.exe /k "%1" %*. 现在,每个批处理脚本窗口在执行后都将保持打开状态。
请注意,这就像使用cmd.exe /c cmd.exe /k program.bat,这意味着另一个 CMD 实例将被启动到父实例中。我找不到如何覆盖第一个/c参数。
您也可以使用[exefile],但现在如果可执行文件具有 GUI,它将显示一个空的控制台框。
use*_*686 18
引用微软:
当附加到控制台的最后一个进程终止或调用 FreeConsole 时,控制台将关闭。
换句话说,Win32 控制台窗口将始终在其中运行的最后一个程序退出时关闭,并且您无法更改此设置。
(对于 16 位 MS-DOS 程序,Windows 在属性对话框中提供了一个选项“退出时关闭”,但这并不是上述行为的例外:它是保持窗口打开的 NTVDM 进程。此外,这个选项是再次每个程序。)
只需在批处理文件所在的位置打开命令提示符,然后手动键入批处理文件的名称即可在该窗口中运行它。
1.导航到可执行文件所在的文件夹
2.Shift-右键单击并选择“来自此处的命令窗口”
3.键入可执行文件的名称并按回车键
4.进程应该运行,但窗口应该保持打开状态
cmd.exe /k会给你一些批次的麻烦。如果批处理exit 1(没有/B),您的控制台将被关闭。一个技巧是使用:
cmd.exe /k cmd /c ...
Run Code Online (Sandbox Code Playgroud)
要默认对所有批处理文件使用此选项,请将HKEY_CLASSES_ROOT\cmdfile\shell\open\command\(default)和设置HKEY_CLASSES_ROOT\batfile\shell\open\command\(default)为"%windir%\system32\cmd.exe" /k "%windir%\system32\cmd" /c "%1" %*.
| 归档时间: |
|
| 查看次数: |
326634 次 |
| 最近记录: |