it-swarm-ru.tech

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

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

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

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

54
Jake

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

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

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

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

37
afrazier

Я думаю, что это самое простое и самое короткое решение для запуска пакетного файла без открытия окна 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, и волшебство произойдет!

20
indago

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

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

8
vhanla

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

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

 Bat to exe

5
Don't Root here plz...

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

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

 @ ECHO OFF 
 START/B PuTTY.exe -load name_of_my_config_file

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

4
Adonis Darwish

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

START /B batchfile

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

начните /? говорит о/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.
4
Dennis Williamson

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

Итак, 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:
 ...
3
therube

Вы можете использовать RunHiddenConsole

hideExec.bat

@echo off
RunHiddenConsole batch.bat
3
Jens A. Koch

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

1
raviolli

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

0
Jesse

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

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

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

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

0
kayleeFrye_onDeck

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

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

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

CMDOW [window] /END

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

CMDOW [window] /CLS

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

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

0
sonrad10