Почему "@echo off" не имеет значения? - PullRequest
0 голосов
/ 31 декабря 2010

В файле .bat вот так:

@echo off
start C:/my_test.exe

Почему первая строка не имеет значения?Я подумал, что при «@echo off» оно не откроет командное окно, но оно все еще мигает, а затем закрывается, оно действует так же, как и без первой строки.Как вообще не открывать командное окно?Другими словами, как написать файл .bat, чтобы при его запуске открывался ТОЛЬКО мой exe-файл, окно командной строки Windows вообще не отображалось.

Я хочу, чтобы приложение запускалось призапуска, поэтому мне сказали создать файл bat и поместить его в папку «Пуск», чтобы вообще не отображать окно командной строки, мне предложили создать ярлык, как создать ярлык исохранить его в папке запуска, мне нужно сделать это из моего приложения, как выглядит команда DOS?Сначала необходимо найти папку для запуска, а затем создать и сохранить ярлык в папке запуска.

Ответы [ 4 ]

4 голосов
/ 31 декабря 2010

@ echo off просто скажите интерпретатору оболочки не печатать выполненные команды в командной строке. Это не означает, что сама командная строка не будет выполнена, так как команда propt (т.е. cmd.exe) является средой, в которой запускается пакетный файл. Чтобы получить нужный эффект, просто создайте ярлык для вашего exe-файла.

1 голос
/ 31 декабря 2010

Мало возможных опций:

  1. Создайте установщик для вашего приложения (большинство из них автоматизируют создание ярлыков [запуска]).

  2. ВыВы можете зарегистрировать свое приложение в реестре для запуска, вот пример примера командной строки:

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

  3. Вы можете создать ярлык с помощью jscript или vbscript ( примеры ).

Обновлено : если вы не хотите переходить к установщику или решениям jni / jna,Вот примеры вопросов и ответов для [2]:

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) {} }
1 голос
/ 31 декабря 2010

Окно консоли открывается до запуска вашего командного файла. Поэтому внутри командного файла нет ничего, что могло бы помешать появлению окна консоли.

Однако вы можете контролировать, как открывается окно консоли. Если это ярлык на вашем рабочем столе, в ярлыке должен быть параметр, который сообщает о том, что окно должно быть свернуто, например.

Если ваш пакетный файл действительно такой, как описано, и запускает только один исполняемый файл, почему бы просто не запустить его непосредственно, а не проходить через однострочный пакетный файл?

0 голосов
/ 02 мая 2014

Привет, это может быть более простое решение http://www.portablefreeware.com/?id=1660 - это Bat_To_Exe_Converter.exe, он преобразует ваш командный файл в исполняемый файл с возможностью запуска без вывода сообщений (без просмотра окна CMD). Мне нравится этот маленький инструмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...