Как создать пакетный файл Windows, который не показывает командную строку при выполнении? [Дубликат]

58

Я установил рубиновый камень под названием Redcar, который запускается из командной строки. Когда он запускается, он крадет оболочку до ее завершения, поэтому мне нужно создать новое окно оболочки, чтобы продолжить работу в командной строке. Используемая мной оболочка - это оболочка GITBash от MySysGit.

Я обнаружил, что файл Redcar.bat предназначен для запуска Redcar в качестве ярлыка, но я не хочу, чтобы дополнительное окно командной строки открывалось всякий раз, когда я запускаю файл BAT.

Как мне просто запустить BAT, не видя подсказку?

Джейк
источник
1
Жаль, что я не знал ответ на этот +1 для хорошего вопроса.
Supercereal
@Kyle аналогичный вопрос задавался перед тем, как superuser.com/questions/191149/how-to-execute-cmd-exe-silently упоминает HSTART и кратко упоминает, что VBS-файл тоже может его запустить
barlop
Можете ли вы обновить выбранный ответ? Это возможно и очень просто, когда вы знаете, как .. пакетный файл: строка 1: set var1=hello.txtстрока 2:start "test" notepad.exe "%~dp0%var1%"
Коди Браун
Просто используйте ::или @REM. Источник: superuser.com/a/843754/101936
PHPst

Ответы:

38

Вы не можете - выполнение командного файла со встроенной командной строкой будет держать окно открытым до выхода из командного файла.

Что вы можете сделать, это предпринять шаги, чтобы убедиться, что пакетный файл завершается как можно быстрее. Если это вообще возможно, измените командный файл для запуска любой программы с помощью startкоманды. По умолчанию startвозвращается немедленно, не дожидаясь завершения программы, поэтому пакетный файл продолжит работу и, по-видимому, немедленно завершится. Соедините это с изменением ярлыка, чтобы минимизировать запуск командного файла, и вы увидите только вспышку панели задач, даже не увидев окно на экране.

Одно предостережение: если вы запускаете программу в консольном режиме, которой являются многие интерпретаторы сценариев, пакетный файл будет ожидать выхода из программы, а при использовании startпоявится новое окно консоли. В этом случае вам нужно запустить версию интерпретатора для Windows вместо консольной - в этом нет startнеобходимости. Для Perl вы бы запустили wperl.exeвместо perl.exe. Для Python это pythonw.exeвместо python.exe. В старом дистрибутиве Win32 Ruby, который я скачал rubyw.exe, должно быть то же самое.

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

afrazier
источник
Спасибо, что отвечает на мой вопрос. Что действительно раздражало, так это не то, что появилось окно с подсказкой, а то, что оно должно оставаться открытым, пока программа работает. Теперь вспышка вполне терпима и не так раздражает. Проверю, могу ли я изменить скрипт для запуска rubyw вместо ruby.
Джейк
1
Огромное спасибо за разъяснение различий между «python» и любым «pythonw» - наконец-то я нашел решение для запуска инструментов окна python, которые у нас есть, без командной строки в фоновом режиме.
FP
«Java.exe» и «javaw.exe» - это одно и то же.
redbeam_
Вы можете - только не в самом пакетном коде. на самом деле, здесь есть несколько вопросов о том, как скрыть командную строку superuser.com/questions/62525/… superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop
21

Я думаю, что это самое простое и самое короткое решение для запуска пакетного файла без открытия окна DOS, оно может быть очень отвлекающим, если вы хотите запланировать набор команд для периодического запуска, поэтому окно DOS продолжает появляться, вот ваше решение , Используйте скрипт VB для вызова командного файла ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

Скопируйте строки выше в редактор и сохраните файл с расширением .VBS. Отредактируйте имя файла .BAT и путь соответственно. Тогда просто запустите файл .vbs, и волшебство произойдет!

Indago
источник
8

Вы можете запустить другой пакетный файл с помощью START / MIN CMD.EXE / C mybatchfile.bat из командной строки.

Снаружи откроется окно консоли cmd, но во избежание этого вы можете создать файл ярлыка со свойствами, измененными для запуска в свернутом виде .

vhanla
источник
2
В Windows 8.1 этот параметр находится в свойствах -> вкладка «Ярлык» -> «Выполнить»: -> свернут (по умолчанию «Нормальное окно»)
пикс
5

Для этого используйте программу Bat To Exe Converter, чтобы конвертировать ваш командный файл в исполняемый файл.

При преобразовании в исполняемый файл вы найдете возможность запустить ваш файл как приложение-невидимку в разделе видимости. Таким образом, когда вы запустите его, он будет работать без окна.

Bat, чтобы выйти

Не рутируйте здесь, плз ...
источник
Веб-сайт требует от вашего компьютера «разгадать» криптографический код Вот программа nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks
4

Продолжая ответ Денниса Уильямсона, вы можете отредактировать командный файл и добавить (prepend) START /Bк выполняемой вами команде.

Например, у меня есть пакетный файл, который запускает замазку и имел ту же проблему (дополнительный CMD), поэтому я так и написал:

@ECHO OFF
START / B putty.exe - загрузить имя_файла_config_file

Это сработало отлично.

Адонис Дарвиш
источник
4

Дайте это попробовать:

START /B batchfile

примечание добавлено по барлоп

Начало /? говорит о / B

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.
Деннис Уильямсон
источник
3
Это может сработать, если у меня открыта командная строка, но когда я использую .bat, я дважды щелкаю по нему или по ярлыку на рабочем столе. Я пытаюсь избежать необходимости иметь командную строку для запуска этой программы.
Джейк
3

Я не совсем понимаю вашу проблему, но с некоторыми из моих пакетных файлов я использую «глупого», единственная цель которого - запустить основной пакетный файл.

Итак, GO.BAT будет иметь:

cmd /c go2.bat %1 %2 %3
exit

Выход закрывает окно командной строки, которое в противном случае оставалось бы открытым.

И GO2.BAT будет иметь фактически содержимое пакетного файла, которое я хочу.

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...
therube
источник
1

Если вы все еще заинтересованы в том, чтобы вообще не показывать окно консоли, вот решение от stackoverflow, которое сработало для меня (в моем случае я ничего не помещал в реестр, но там, где мне было нужно).

пельменей
источник
0

Просто поместите переключатель / b перед дорожкой. Это не откроет вторую командную строку.

Джесси
источник
0

Ответ Indago был лучшим решением для меня до сих пор. Файл VBS позволяет мне запускать функции пакета через сценарий, предотвращая появление окна CMD. Есть несколько предостережений, хотя:

  1. Если вашему пакету требуются права администратора, создайте или используйте существующий пакет, который вызывает VBS, и запустите этот пакет от имени администратора.

  2. При отсутствии видимости может быть трудно определить, действительно ли то, что вы пытаетесь сделать, идет так, как вы этого хотите.

С учетом вышесказанного, я сначала поставил небольшую пробную настройку / модульный тест, чтобы убедиться, что он работает именно так, как вы хотите, прежде чем интегрировать его.

kayleeFrye_onDeck
источник
0

Я использовал cmdow в прошлом, и это, кажется, сработало для того, что я хочу.

Возможно, вы захотите использовать один из следующих вариантов: CMDOW [window] /HID

/HID скрывает указанное окно

CMDOW [window] /END

/END закрывает указанное окно

CMDOW [window] /CLS

/CLS вежливо попросил закрыть окно (некоторые окна могут открывать диалоговое окно)

Надеюсь это поможет.

sonrad10
источник
-5

Просто сделайте ярлык для командного файла, щелкните правой кнопкой мыши на нем, нажмите Properties, перейдите на Generalвкладку, установите флажок Hidden, нажмите, Applyзатем и затем OK.
Теперь, когда вы откроете ярлык, он запустит командный файл Hidden.

MagicalDiamonds
источник
Это неправильно, поскольку он просто скрывает ярлык / пакетный файл, в то время как пользователь хочет, чтобы пакетный файл выполнялся незаметно.
Не Рут здесь плз ...