为什么“@echo off”没有什么区别?

时间:2010-12-30 23:23:22

标签: file command window batch-file

在这样的.bat文件中:

@echo off
start C:/my_test.exe

为什么第一行没有任何区别?我想“@echo off”,它不会打开命令窗口,但它仍然闪烁然后关闭,它与没有第一行的效果相同。如何避免命令窗口打开?换句话说,如何编写.bat文件,以便在运行时,只打开我的exe文件,Windows命令提示符窗口根本不会显示。

我想让应用程序在启动时运行,所以我被告知创建bat文件并将其放在Start up文件夹中,所以为了没有显示命令提示符窗口,我被建议创建一个捷径,如何创建快捷方式并将其保存在启动文件夹中,我需要从我的应用程序中执行此操作,DOS命令是什么样的?首先需要找到启动文件夹的位置,然后在启动文件夹中创建并保存快捷方式。

4 个答案:

答案 0 :(得分:4)

@echo off告诉shell interpeter不要在命令提示符下打印执行的命令。这并不意味着命令提示本身不会被执行,因为命令propt(即cmd.exe)是运行批处理文件的环境。只需创建exe的快捷方式即可获得效果。

答案 1 :(得分:1)

在批处理文件开始运行之前,打开控制台窗口。因此,您无法在批处理文件中放置任何内容以防止出现控制台窗口。

但是,您可以控制 控制台窗口的启动方式。如果这是来自桌面上的快捷方式,则快捷方式中应该有一个设置,告诉窗口打开最小化,例如。

如果您的批处理文件确实如上所述并且只启动了一个可执行文件,为什么不直接启动可执行文件而不是通过单行批处理文件?

答案 2 :(得分:1)

几种可能的选择:

  1. 为您的应用程序制作安装程序(大多数都会自动创建[启动]快捷方式)。

  2. 您可以在注册表中注册您的应用程序以进行启动,这是示例命令行示例:

    reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v Test /t REG_SZ /d test.exe

  3. 您可以借助jscript或vbscript(examples)创建快捷方式。

  4. 已更新 :如果您不想使用安装程序或jni / jna解决方案,请参阅[2]的q& d示例:

    String command = "reg add \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\" /v Test /t REG_SZ /d test.exe /f";
    
    try {
        int result = Runtime.getRuntime().exec(command).waitFor();
        System.out.println("command execution " + ((result == 0) ? "succeded" : "failed"));
    } catch (Exception e) {
        // handle error
        e.printStackTrace();
    }
    

    和[3]:

    // construct your script body
    String script = "Set Shell = CreateObject(\"WScript.Shell\")\r\n"
                  + "Folder = Shell.SpecialFolders(\"Startup\")\r\n"
                  + "Set link = Shell.CreateShortcut(Folder + \"\\\\test.lnk\")\r\n"
                  + "link.Arguments = \"arg1 arg2\"\r\n"
                  + "link.Description = \"Test shortcut\"\r\n"
                  + "link.TargetPath = \"c:\\\\bin\\\\test.exe\"\r\n"
                  + "link.WorkingDirectory = \"c:\\\\bin\"\r\n"
                  + "link.Save\r\n";
    
    File vbs = new File("test.vbs");
    FileWriter writer = null;
    
    try {
        // write script contents to file
        writer = new FileWriter(vbs);
        writer.write(script);
        writer.close();
        writer = null;
        // execute
        Runtime.getRuntime().exec("cscript.exe \"" + vbs.getAbsolutePath() + "\"").waitFor();
    } catch (Exception e) {
        // handle error
        e.printStackTrace();
    }
    
    if (writer != null) { try { writer.close(); } catch (Exception e) {} }
    

答案 3 :(得分:0)

嗨,这可能是一个更简单的解决方案http://www.portablefreeware.com/?id=1660是一个Bat_To_Exe_Converter.exe,它会将您的批处理文件转换为可执行文件,并且可以选择无提示运行(无需看到CMD窗口)我喜欢这个小工具。