start /B "ngrok" call ngrok.exe tcp 22 -log=stdout > ngrok.log
每当我尝试使用taskkill ( ) 终止 ngrok.exe 任务( taskkill /IM ngrok.exe /F
) 时,它都不起作用。显然我终止了 ngrok.exe 进程,但 Windows 命令提示符 (会话处理程序) 仍然存在。
当我尝试再次运行该 exe 时,它显示:The process cannot access the file because it is being used by another process.
我也尝试过添加/T
taskkill 并删除所有子进程,但还是不行。有什么解决办法吗?
答案1
我看到的问题是您在命令call
中使用该命令start
。
call
仅用于批处理过程中调用其他批处理过程中的功能(通过标签或文件)。
例如:
call :MyLabel
<- 其中 MyLabel 是在同一文件中定义的标签。
或
call "c:\mypath\dumb.bat"
<- 此批处理运行后,它将从此处继续
在这种情况下,这不是您想要的,因为这些是呼叫的唯一用途。
关于 call 命令的快速课程
此外,即使这不是您想要的,因为我们正在讨论何时使用call
,为什么不简单地使用goto
或直接调用批处理文件呢?
标签方法的原因是,它call
可以通过调用批处理标签像函数一样使用。调用标签后,标签后面的代码(有点像函数)可以通过在批处理中使用或创建goto :EOF
非常exit /b
“类似函数”的行为返回到调用语句的位置。 以前,这就像在基本中使用GoSub
一样。Return
如果在从另一个批处理文件调用批处理文件时不使用call
,则在调用第二个批处理文件后,该过程将会退出(让人困惑批处理停止的原因)。
否则,不要使用它!:)