我有一个批处理文件,遇到几个错误。这些错误要求强制关闭命令提示符。这导致我不得不再次打开文件来解决此问题。
由于此应用程序的性质,需要一直运行。
我正在寻找一种使文件遇到错误时自动重启的方法。有没有我可以使用的命令?
您能否详细描述该命令为何实现这种解决方案?
更新:
我建议实现您的目标的方法是将您的批次变成Service。(此处的文档)通过将您的批次转换为服务,它不再受用户登录,权限问题的约束,它将作为SYSTEM ACCOUNT运行。这本身可以减轻对该过程的愤怒。
完成此操作后,您可以编写一个批处理文件来确保您的服务确实在运行。您当前的问题是它不会自动重启。嗯,服务始终在运行-即使出现错误,它仍然会尝试运行。
这意味着,除非有致命异常,否则您的服务应始终可以工作。但是,可以确定的是,您可以创建一个批处理,以确保您的服务正在运行。
一个例子:
: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
Run Code Online (Sandbox Code Playgroud)
因此,理论上,每3600秒它将测试您的服务是否正在运行,如果不是,它将为您启动该服务。
重要提示:
这是解决问题而不是规避问题的正确方法。但是,正如我指出的那样,您的批次仍应恳求Exception Handling确保您的应用程序不会陷入无法使用的状态。这仍然不是最好的方法,因为它应该恳求Exception Handling并Verification测试其状态。
如前所述,您有很多方法可以解决问题。但是,您的思维方式是线性思维定式。意思是:
基本上基于我所看到的最小示例,您似乎已经创建了一个无限循环来连续执行命令。我的问题是:当循环出错时,如何继续运行?
您已经说过,它发生在随机区域中-没有什么是随机的,而是可能需要进行一些验证/测试以确保其保持适当状态的区域。 您越早发现潜在问题,程序就可以更有效地运行而不会出错。
希望有帮助-
您的批处理应用程序到底做什么?
我问的原因是因为您可以使用Windows Task Scheduler来解决该问题,该任务允许您配置一些参数以根据指定的条件自动启动和自动打开特定的应用程序。 会理想吗?它会真正实现您的需求的自动化吗?
正如GolezTrol上文所述,导致错误的原因将是解决问题的更重要的方面。根据您的评论
坦白说,每次的错误都不相同。
这可能表明批处理脚本不遵循测试而是假设它已成功完成。没有任何下划线的信息,例如:
这使指向正确的方向变得相对困难。我会考虑的一件事是IF。这是一项基本的任务,但非常重要-
if(Directory.Exists(dirName))
{
// Do This
}
else
{
// Do This
}
Run Code Online (Sandbox Code Playgroud)
我发现C#大纲是一种更容易理解IF目的的方法。实际上,您可以在批处理中实施类似的操作。您可以这样完成:
if exist { insert file name } (
rem file exists
) else (
rem file doesn't exists
)
Run Code Online (Sandbox Code Playgroud)
或者您可以这样实现:
if exists c:\myFile.bat notepad c:\myFile.bat
Run Code Online (Sandbox Code Playgroud)
如果C:\myFile.bat存在,请打开记事本。之所以如此重要,是因为如果该变量不存在,则不会受到影响。这使您的应用程序本质上可以以非常原始的方式做出决策。
您有很大的灵活性-关于此主题的示例很多,因为批处理编程已经存在了很长时间。另一个选择是最终移至Powershell。它将有权访问Windows管理界面(WMI)。
希望这会为您指明正确的方向,如果没有更多信息,我们的答案可能不会有太大帮助。