【问题标题】:Start a program from Batch while preventing duplicates从批处理启动程序,同时防止重复
【发布时间】:2020-01-21 14:32:43
【问题描述】:

我正在从 Batch 启动一个程序,但如果该程序已经在运行,我想避免启动第二个实例。

到目前为止,我已经编写了以下代码,它似乎可以工作:

TASKLIST /FI "IMAGENAME eq speedfan.exe" | FIND "speedfan.exe" >NUL
IF %ERRORLEVEL%==0 (
    TASKKILL /F /IM speedfan.exe
)
START "" "C:\Program Files (x86)\SpeedFan\speedfan.exe"

或者,如果我想保留当前实例而不是开始一个新实例:

TASKLIST /FI "IMAGENAME eq speedfan.exe" | FIND "speedfan.exe" >NUL
IF NOT %ERRORLEVEL%==0 (
    START "" "C:\Program Files (x86)\SpeedFan\speedfan.exe"
)

这可以改进/简化吗?


更新:感谢大家的 cmets!到目前为止,我修改后的代码变成了:

TASKLIST /FI "IMAGENAME eq speedfan.exe" | FINDSTR /BLI "speedfan.exe " >NUL || (
    START "" "C:\Program Files (x86)\SpeedFan\speedfan.exe"
)

(为了简单起见,我可能会删除 /FI "IMAGENAME eq speedfan.exe" 部分)

【问题讨论】:

  • TASKLIST /FI "IMAGENAME eq speedfan.exe" | FIND "speedfan.exe" >NUL || START "" "C:\Program Files (x86)\SpeedFan\speedfan.exe"
  • 如图所示,可以使用条件执行。 && 表示如果上一个命令成功则执行此命令。 || 表示如果上一个命令不成功,则执行此命令。
  • 您可以像使用IF 命令一样在条件执行中使用括号。您实际上是在尽可能高效地完成这项任务。如果您想减慢它的速度,请随时使用WMICPowershell 来查看任务是否正在运行。
  • 你也可以缩短你的初始命令行长度,TASKLIST /FI "IMAGENAME eq speedfan.exe" | FIND "speedfan.exe" 可以是TASKLIST | FIND /I "speedfan.exe "这假设您没有另一个名称以 speedfan.exe 结尾的可执行文件
  • 为了健壮性,您可以缩短它,但使用FindStr 而不是Find。例如,TASKLIST | FINDSTR /I "\<speedfan\.exe\>"TASKLIST | FINDSTR /BLI "speedfan.exe "

标签: windows batch-file process task


【解决方案1】:

这是一个快速示例,旨在请求输入确认以在运行时关闭它,或者在未运行时仅打开它。我希望它对于您的目的足够强大。

@"%__AppDir__%tasklist.exe" /Fi "ImageName Eq speedfan.exe" /Fo CSV /NH^
 | "%__AppDir__%find.exe" ":" > NUL && (
    Start "" "C:\Program Files (x86)\SpeedFan\speedfan.exe") || (
    "%__AppDir__%choice.exe" /M "Would you like to close SpeedFan"
    If Not ErrorLevel 2 "%__AppDir__%taskkill.exe" /Im speedfan.exe /T > NUL)

为了整洁,我将第一行分成两行,因为你不特别喜欢长行。

【讨论】:

  • 也许%__AppDir__% 环境变量有点矫枉过正?
  • 不,他们不是!您要求稳健性,如果没有该变量,代码将依赖于 PC 或用户没有错误地修改,(有意或无意地)%PATH% 的内容。根据我的经验,很多人都是这样做的!
  • 确实,可执行的影子……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2016-05-24
  • 2021-12-19
  • 1970-01-01
  • 2016-11-27
  • 2014-05-14
  • 2017-07-27
相关资源
最近更新 更多