【问题标题】:Why "@echo off" is not making a difference?为什么“@echo off”没有影响?
【发布时间】:2010-12-30 23:23:21
【问题描述】:

在这样的 .bat 文件中:

@echo off
start C:/my_test.exe

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

我希望应用程序在启动时运行,所以我被告知要创建 bat 文件并将其放在 Start up 文件夹中,因此根本不显示命令提示符窗口,建议我创建一个快捷方式,如何创建快捷方式并将其保存在启动文件夹中,我需要从我的应用程序中执行此操作,DOS 命令是什么样的?需要先找到启动文件夹在哪里,然后在启动文件夹中创建并保存快捷方式。

【问题讨论】:

  • 为了在您的启动文件夹中创建一个快捷方式,您可以右键单击您的 exe,将其拖到开始按钮并按住一秒钟。然后,将弹出开始菜单,您应该继续将其拖到“所有程序”文件夹,然后是启动文件夹。然后你应该放下鼠标右键并从弹出的菜单中选择“在此处创建快捷方式”。您可以直接为您的 exe 创建快捷方式,无需通过 bat 文件。说明适用于 Windows 7,但其他 Microsoft 操作系统的想法相同。
  • 我正在开发一个应用程序,我需要它自动启动而无需用户执行上述步骤,它是一个日历程序,用于检查当天是否有事情要做,并且小时,应用程序如何在用户第一次运行时在启动文件夹中创建快捷方式?
  • 对于 win 7,请参见:sevenforums.com/tutorials/1401-startup-programs-change.html。在 XP 上,您可以在“AllUsers”启动文件夹中创建快捷方式(即“%AllUsersProfile%\Start Menu\Programs\Startup”)

标签: file command window batch-file


【解决方案1】:

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

【讨论】:

  • 添加转到快捷方式的属性并运行它 mnimized 而不是正常的 wndow !这样做将确保控制台窗口不会弹出。但是它仍然会出现在任务栏上。
【解决方案2】:

几个可能的选项:

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

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

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

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

更新:如果您不想使用安装程序或 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) {} }

【讨论】:

  • 用Java怎么做,我知道Java可以执行windows命令,比如“start C:/test.exe”,不知道是不是可以把命令简化成一行,或者保存进入一个可执行文件,我只需要运行那个文件。
  • 太棒了!这些是对我的问题最接近的答案,我仍然不清楚的一件事是:我希望我的应用程序可以在所有版本的 Windows 上运行,至少是 XP、Vista 和 7,我该如何通过你的解决方案来做到这一点。这两种方法有什么区别,哪一种在不同版本的 Windows 上更可靠?如果我的应用程序中有代码,如果每次应用程序运行时都执行它会导致问题,从而导致多个条目副本。我想这是最后的障碍!
【解决方案3】:

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

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

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

【讨论】:

  • 查看我编辑的问题,我不知道如何在我的应用程序的启动文件夹中创建快捷方式。用户只需要运行一次,它会自动找到启动文件夹在哪里,并将自己的快捷方式保存到启动文件夹中,如何?
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2017-11-06
    • 2015-02-08
    相关资源
    最近更新 更多