You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

批处理文件启动程序异常修复及功能优化需求

批处理文件启动程序异常修复及功能优化需求

Hey JanusP,我来帮你一步步搞定这个批处理的问题,先把现有错误修好,再实现你要的隐藏原窗口、按键关闭所有程序的功能~

一、先修复现有代码里的错误

你的原代码有几处语法问题,导致部分程序启动失败,我给你逐个指出并修正:

  • VSeeFace启动行:原代码start D:\VSeeFace\VSeeFace.exe""多了一对多余的空引号,这会让系统识别错误的路径,改成:
    start "" "D:\VSeeFace\VSeeFace.exe"
    
  • YukarinatteConnector启动行start命令的规则是,如果第一个参数带引号,会被当作新窗口的标题,而不是程序路径。你把路径和参数一起放在引号里,系统根本找不到程序。正确写法是先指定窗口标题(可以是空字符串""),再单独写程序路径和参数:
    start "" "D:\ync\Connector_64bit\Machan_YukarinatteConnector.exe" /en
    
  • Spud程序启动行:确保你的路径完全正确(比如D:\spud\Spud-Keyboard.exe确实存在),同时改成标准的start写法,避免路径含空格时出问题(哪怕现在没有,提前规范更好):
    start "" "D:\spud\Spud-Keyboard.exe"
    start "" "D:\spud\Spud-Mouse.exe"
    

其他程序的启动行也统一改成规范写法,避免路径有空格时出问题,比如:

start "" "D:\obs-studio\bin\64bit\obs64.exe"
start "" "D:\Iriun-Webcam\Iriun-Webcam.exe"
start "" "D:\Chatty\Chatty.exe"
start "" "D:\restreamchat\RestreamChat.exe"

二、隐藏原CMD窗口

要让批处理运行时不显示那个黑框框,我们可以在批处理开头加一段逻辑:让它启动一个最小化的自身实例,然后原窗口立刻退出。修改后的开头是:

@echo off
:: 检查是否已经是最小化运行的实例,避免无限循环
if not "%1"=="hidden" start /min "" "%~f0" hidden & exit

这样原窗口会瞬间启动一个最小化的批处理进程,然后自己关闭,你就看不到原CMD窗口了。

三、实现“按特定键自动关闭所有程序”的功能

我们可以用choice命令来监听特定按键(比如按Q键关闭所有程序),然后用taskkill命令结束每个启动的程序进程。具体步骤:

  1. 在所有程序启动完成后,添加等待按键的提示
  2. 按下指定键后,逐个关闭对应的进程

这里需要注意每个程序的进程名(比如obs64.exe、VSeeFace.exe这些,要和任务管理器里的进程名一致),完整代码里会包含这部分:

完整的优化后代码

@echo off
:: 隐藏原CMD窗口:启动最小化实例并退出原窗口
if not "%1"=="hidden" start /min "" "%~f0" hidden & exit

:: 启动所有程序(统一规范写法,避免路径/参数错误)
start "" "D:\obs-studio\bin\64bit\obs64.exe"
start "" "D:\VSeeFace\VSeeFace.exe"
start "" "D:\Iriun-Webcam\Iriun-Webcam.exe"
start "" "D:\Chatty\Chatty.exe"
start "" "D:\restreamchat\RestreamChat.exe"
start "" "D:\ync\Connector_64bit\Machan_YukarinatteConnector.exe" /en
start "" "D:\spud\Spud-Keyboard.exe"
start "" "D:\spud\Spud-Mouse.exe"

:: 等待用户按下Q键关闭所有程序
echo 所有程序已启动,按 Q 键关闭所有程序并退出...
choice /c Q /n /m "请按键:"

:: 关闭所有启动的程序(进程名要和任务管理器里的一致)
taskkill /f /im obs64.exe
taskkill /f /im VSeeFace.exe
taskkill /f /im Iriun-Webcam.exe
taskkill /f /im Chatty.exe
taskkill /f /im RestreamChat.exe
taskkill /f /im Machan_YukarinatteConnector.exe
taskkill /f /im Spud-Keyboard.exe
taskkill /f /im Spud-Mouse.exe

exit

额外说明

  • /f参数是强制关闭进程,如果有些程序有弹窗阻止关闭,这个参数能确保强制退出
  • 如果你的某个程序进程名和我写的不一样,自己去任务管理器里核对修改就行
  • 如果你想换其他按键,把choice /c Q里的Q改成你想要的键(比如E代表Exit)

备注:内容来源于stack exchange,提问作者JanusP

火山引擎 最新活动