在后台运行批处理文件

时间:2018-01-29 16:36:31

标签: windows batch-file background-process startup

我有一个批处理文件,我想在系统(Windows 2007)打开时在后台运行。批处理文件监视给定程序的任务列表,当它看到它关闭时,提示用户取消许可。

我目前正在尝试这样做而不将批处理文件转换为可执行文件或Windows服务文件。

我发现了更多的在线参考资料,而不是我可以计算的,它告诉我应该使用" start / b file.bat"在后台运行批处理文件,但这对我不起作用,它只是在我使用的同一cmd行窗口中启动批处理文件。

任何人都可以建议出现问题,甚至更好;一个很好的简单方法让我让批处理文件运行离子启动(我不能使用GUI,因为我必须远程将其推送到多台计算机)

由于

2 个答案:

答案 0 :(得分:1)

您可以创建批处理文件的快捷方式,并将快捷方式放在unboxing conversion

C:\ Users \\ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup

由于您必须远程将其推送到多台计算机,因此您应该能够通过网络将批处理文件复制到启动程序目录,假设远程计算机已启用WinRM并且您的帐户具有足够的权限。

如果您希望此批处理文件在启动时在后台运行,您可以从VBScript引用批处理文件(而不是使用批处理文件的快捷方式)并设置Startup Programs directory

    SELECT COUNT(*)
    FROM <TABLE 1> ONN, <TABLE 2> SV
   WHERE SV.CSA_SHP_VISIT_STG_SEQ_ID=ONN.CSA_SHOP_VIST_SEQ_ID
    AND EXISTS (SELECT '1' FROM  <TABLE 3> TMP 
    WHERE TRIM(SV.WORK_ORDER_NUM) = TRIM(TMP.WORK_ORDER_NUM)
    AND PLANT IN ('EMA')
    AND regexp_replace(TRIM(ONN.INSTLD_PART), '^0+([[:digit:]]+)$', 
   '\1')=TRIM(TMP.INSTLD_PART)  AND
  TRIM(ONN.INSTLD_PART_SERIAL_NUM)=TRIM(TMP.INSTLD_PART_SERIAL_NUM) AND      
    nvl(to_number(TRIM(ONN.INSTLD_PART_CSN)),0)=
    nvl(to_number(TRIM(TMP.INSTLD_PART_CSN)),0)
    and REGEXP_LIKE(tmp.INSTLD_PART_CSN, '^-?\d+(\.\d+)?$'))

只需为此vbscript文件提供.vbs扩展名。

答案 1 :(得分:0)

如果您关注的程序是GUI程序(即非控制台),请等待它退出。批处理等待GUI程序退出(但不是以交互方式启动)。

notepad
echo My notepad exited

Start /b在同一窗口中启动程序。见Start /?。 Start也常常是错误的命令。它以异常方式启动程序。有关如何启动程序的信息,请参见http://stackoverflow.com/questions/41030190/command-to-run-a-bat-file/41049135#41049135的结尾。

这是一个VBS文件。

此监视器会退出记事本,弹出一个消息框,然后重新启动记事本。

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery("SELECT * FROM Win32_ProcessStopTrace")

Do
    Set objReceivedEvent = objEvents.NextEvent
    msgbox objReceivedEvent.ProcessName
    If lcase(objReceivedEvent.ProcessName) = lcase("Notepad.exe") then 
        Msgbox "Process exited with exit code " & objReceivedEvent.ExitStatus
        WshShell.Run "c:\Windows\notepad.exe", 1, false
    End If
Loop

这应该使用更少的电池电量和CPU周期。批处理文件是逐行读取的,因此非常糟糕的后台任务。

如果您关注的程序是GUI程序(即非控制台),请等待它退出。批处理等待GUI程序退出(但不是以交互方式启动)。

notepad
echo My notepad exited