windows bat批处理 循环执行并最小化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows bat批处理 循环执行并最小化相关的知识,希望对你有一定的参考价值。

问题:开机自启动一个 C:\x.bat 这个bat会执行y.exe文件;
C:\x.bat 加入了 start /min "" 即最小化启动;当y.exe执行之后,如果遇到超时,则弹出连接超时的错误,点击确定之后,y.exe退出了,进程中也就没有y.exe了;

然后开机启动项右加入了一个bat;即每30秒检测y.exe是否在运行,没有就执行x.bat

@echo off

:ST

tasklist|find /i "y.exe" || Start "" "C:\x.bat"

ping 127.0.0.1 -n 30 >nul

goto ST

---------------------
现在问题是 我可以实现目的,但有问题,
1. cmd窗口总是显示出来? 我要求全程最小化/后台执行
2. cmd中显示 存储空间不足,无法执行命令。实际CD盘都很足啊空间;
3. 如果y.exe执行超时之后,弹出错误提示,如果我不去点,一直循环有,即一段时间之后有N个错误窗口;

我的最终目标是 开机自启动 c:\x.bat(实际执行的是带配置的y.exe 远程TCP连接)如果出现错误提示框,我点确定之后,继续执行C:\x.bat。。。。。。。。且不能有窗口显示出来,在我不点击错误的确定按钮,只允许一个 错误提示窗

@echo off & title 配置隐藏循环等待执行 By 依梦琴瑶

::设置要执行的程序完整路径
set Exe=C:\\y.exe

::设置是否隐藏执行,0 = 隐藏,1 = 不隐藏
set Hdn=0

::设置是否开机自启,1 = 是,0 = 否
set Auto=1

::设置是否立即执行程序,1 = 是,0 = 否
set Now=1

(echo '隐藏循环等待执行 By 依梦琴瑶
echo On Error Resume Next
echo Do
echo     Set Ws = CreateObject^("WScript.Shell"^)
echo     Ws.Run "%Exe%",%Hdn%,True
echo Loop)>"%AppData%\\LoopWaitExecution.vbs"

if %Auto% equ 1 (
    reg add "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" /v LWE_VBS /t REG_SZ /d "\\"%AppData%\\LoopWaitExecution.vbs\\"" /f >nul 2>nul && (
        echo 已设为开机自启
    ) || (
        echo 请使用右键选择管理员身份运行
        pause
        exit
    )
)

if %Now% equ 1 (
    echo 程序已运行
    start "" "%AppData%\\LoopWaitExecution.vbs"
)
echo 配置已完成
pause

请在此脚本代码中自行设定参数,保存后直接运行,即可配置开机自启等功能。

请注意,此脚本只是用于配置,不是用来执行程序的,所以不要把该脚本加入到开机自启项目中去。

参考技术A

    后台运行BAT,参考这个帖子。

    这里的空间是缓存空间,即内存空间,非磁盘空间。可指定较大的虚拟内存来解决此问题。设置虚拟内存很简单,自行百度此处不赘述。

    有个令人疑惑的地方,弹出多个窗口,如果不是程序本身的问题,就是x.bat被重复执行。不过既然检测y.exe的存在性来决定X.BAT的执行与否,这样的问题应该不会出现。

现在要确定的两个问题:

    一般a.bat调用b.bat,如果被调用b.bat没有执行exit语句,b.bat运行结束后不会终止进程,这可能是导致空间不足的原因。在任务管理器看是否存在多个CMD进程,并在x.bat结束处加入exit。

    要排除程序导致的多窗口问题,然后排除x.bat是否反复被执行过。

开发环境Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | 换行 | Runtime 执行 Cmd 命令 )





Java 文件生成 Windows 系统 .bat 批处理文件并自动执行




1、生成 bat 脚本注意事项


在 Windows 中生成 bat 脚本时 , 必须输出 gb2312 编码的字符串 , 否则执行时会出现中文乱码 ;

另外还要注意 , WIndows 中的换行时 \\r\\n , 不要忽略这个问题 , 否则也会出错 ;

【错误记录】Windows 系统 bat 脚本报错 ( Java 生成 bat 脚本乱码处理 | 输出 GB2312 字符串 | Windows 中的换行时 \\r\\n )


2、Java 执行 Cmd 命令


使用 Runtime.getRuntime().exec 执行 Cmd 命令 ; 通过 BufferedReader 读取执行过程中的输出信息 ;


3、完整代码示例


import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        File bat = new File("cmd.bat");

        OutputStreamWriter osw =new OutputStreamWriter(
                (new FileOutputStream("cmd.bat")),"gb2312");
        osw.write("echo 生成 BAT 脚本\\r\\n");
        osw.write("echo 执行命令\\r\\n");
        osw.close();

        String ret = excuteCmdCommand("cmd.bat");
        System.out.println(ret);
    }

    /**
     * 执行 cmd 命令
     * @param cmdCommand
     * @return
     */
    public static String excuteCmdCommand(String cmdCommand)
    {
        StringBuilder stringBuilder = new StringBuilder();
        Process process = null;
        try {
            process = Runtime.getRuntime().exec(cmdCommand);
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(process.getInputStream(), "GBK"));
            String line = null;
            while((line=bufferedReader.readLine()) != null)
            {
                stringBuilder.append(line+"\\n");
            }
            return stringBuilder.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

4、执行结果


执行上述程序 , 执行结果如下 :

以上是关于windows bat批处理 循环执行并最小化的主要内容,如果未能解决你的问题,请参考以下文章

Windows批处理脚本陷入死循环问题

开发环境Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | 换行 | Runtime 执行 Cmd 命令 )

bat命令执行循环判断功能2

将bat文件作为windows服务执行

循环完成后 FOR 循环恢复执行 - DOS(Windows 命令行)

bat批处理 使用runas执行某一命令后如何获得返回值?