File 崩溃/错误时重新启动批处理文件
我有一个批处理文件,它遇到了几个错误。这些错误要求强制关闭命令提示符。这导致我不得不再次打开该文件以修复该问题 由于该应用程序的性质,它需要一直运行 我正在寻找一种方法,当文件遇到错误时自动重新启动它。有我可以用的命令吗File 崩溃/错误时重新启动批处理文件,file,batch-file,File,Batch File,我有一个批处理文件,它遇到了几个错误。这些错误要求强制关闭命令提示符。这导致我不得不再次打开该文件以修复该问题 由于该应用程序的性质,它需要一直运行 我正在寻找一种方法,当文件遇到错误时自动重新启动它。有我可以用的命令吗 您能否详细描述一下,以及为什么该命令可以实现这样的解决方案?更新: 为了实现您的目标,我建议您将批处理转化为服务。()通过将批处理转换为服务,它将不再受用户登录、权限问题的影响,它将作为系统帐户运行。这本身就可以减轻对这个过程的愤怒 完成后,您可以编写一个批处理文件,以确保您的
您能否详细描述一下,以及为什么该命令可以实现这样的解决方案?更新: 为了实现您的目标,我建议您将批处理转化为服务。()通过将批处理转换为服务,它将不再受用户登录、权限问题的影响,它将作为系统帐户运行。这本身就可以减轻对这个过程的愤怒 完成后,您可以编写一个批处理文件,以确保您的服务确实在运行。您当前的问题是,它不会自动重新启动。嗯,服务总是运行的——即使它有错误,它仍然会尝试运行 这意味着,除非它有一个致命异常,否则您的服务应该始终正常工作-但为了确定,您可以创建一个批处理来确保您的服务正在运行 例如:
:START
timeout 3600
for /F "tokens=3 delims: " %%H in ('sc query "MyServiceName" ^| findstr "
if /I "%%H" NEQ "RUNNING" (
NET START "MyServiceName"
REM Service has Started...
)
)
GOTO START
因此,理论上每3600秒,它将测试您的服务是否正在运行,如果没有,它将为您启动服务
重要提示:
这是解决问题的更恰当的方法,而不是回避问题。然而,正如我所指出的,您的批处理仍然应该执行异常处理
,以确保您的应用程序不会陷入无法使用的状态。这仍然不是最好的方法,因为它应该执行异常处理
和验证
来测试它的状态
正如我前面提到的,你有很多方法来解决你的问题。然而,你的思维方式是线性的。这意味着:
- 执行命令,目标得到保证
- 如果我这样做,这种情况就会发生
批处理应用程序的具体功能是什么 我之所以问这个问题,是因为您可以通过Windows任务调度器绕过这个问题,它允许您配置一些参数,以便根据指定的条件自动启动和自动打开特定的应用程序。是否理想?它会真正自动满足您的需求吗 正如GolezTrol前面提到的,错误的原因将是解决问题的更重要方面。根据你的评论 老实说,每次的错误都不一样 这可能表明批处理脚本没有坚持测试,而是假设它成功完成。没有任何下划线信息,例如:
- 作用
- 代码示例
- 发生错误的位置和任务期间
if(Directory.Exists(dirName))
{
// Do This
}
else
{
// Do This
}
我发现C#大纲是一种更容易理解IF目的的方法。实际上,您可以在批处理中实现类似的功能。您可以这样完成:
if exist { insert file name } (
rem file exists
) else (
rem file doesn't exists
)
if exists c:\myFile.bat notepad c:\myFile.bat
或者你可以这样做:
if exist { insert file name } (
rem file exists
) else (
rem file doesn't exists
)
if exists c:\myFile.bat notepad c:\myFile.bat
如果C:\myFile.bat
存在,则打开记事本。这是一个重要的原因,因为如果变量不存在,那么它就不会受到影响。这使您的应用程序基本上能够以非常原始的方式做出决策
您有相当大的灵活性-在这个主题上有很多例子,因为批处理编程已经存在了很长很长时间。另一种选择是最终迁移到Powershell。它将有权访问Windows管理界面(WMI)
希望这能为你指明正确的方向,如果没有更多的信息,我们的答案可能不会有多大帮助
更新: 为了实现您的目标,我建议您将批处理转化为服务。()通过将批处理转换为服务,它将不再受用户登录、权限问题的影响,它将作为系统帐户运行。这本身就可以减轻对这个过程的愤怒 完成后,您可以编写一个批处理文件,以确保您的服务确实在运行。您当前的问题是,它不会自动重新启动。嗯,服务总是运行的——即使它有错误,它仍然会尝试运行 这意味着,除非它有一个致命异常,否则您的服务应该始终正常工作-但为了确定,您可以创建一个批处理来确保您的服务正在运行 例如:
:START
timeout 3600
for /F "tokens=3 delims: " %%H in ('sc query "MyServiceName" ^| findstr "
if /I "%%H" NEQ "RUNNING" (
NET START "MyServiceName"
REM Service has Started...
)
)
GOTO START
因此,理论上每3600秒,它将测试您的服务是否正在运行,如果没有,它将为您启动服务
重要提示:
这是解决问题的更恰当的方法,而不是回避问题。然而,正如我所指出的,您的批处理仍然应该执行异常处理
,以确保您的应用程序不会陷入无法使用的状态。这仍然不是最好的方法,因为它应该执行异常处理
和验证
来测试它的状态
正如我提到的b