Jak utworzyć plik wsadowy systemu Windows, który nie wyświetla wiersza polecenia po uruchomieniu? [duplikować]

58

Zainstalowałem rubinowy klejnot o nazwie Redcar, który jest uruchamiany z wiersza poleceń. Kiedy działa, kradnie powłokę, dopóki się nie skończy, więc muszę utworzyć nowe okno powłoki, aby kontynuować pracę z wierszem poleceń. Powłoka, której używam, to powłoka GITBash od MySysGit.

Znalazłem plik Redcar.bat, który ma uruchamiać Redcar jako skrót, jak sądzę, ale nie chcę, aby dodatkowe okno wiersza polecenia otwierało się przy każdym uruchomieniu pliku BAT.

Jak po prostu uruchomić BAT bez wyświetlania monitu?

Jake
źródło
1
Chciałbym znać odpowiedź na to +1 za dobre pytanie.
Supercereal
@Kyle podobne pytanie zostało zadane przed superuser.com/questions/191149/how-to-execute-cmd-exe- po cichu wspomina o HSTART i krótko wspomina, że ​​plik VBS może go również uruchomić
barlop
Czy możesz zaktualizować wybraną odpowiedź? Czy jest to możliwe i bardzo proste, gdy wiesz jak ... plik wsadowy: linia 1: set var1=hello.txtlinia 2:start "test" notepad.exe "%~dp0%var1%"
Kody Brown
Po prostu użyj ::lub @REM. Źródło: superuser.com/a/843754/101936
PHPst

Odpowiedzi:

38

Nie możesz - wykonanie pliku wsadowego za pomocą wbudowanego wiersza polecenia spowoduje, że okno pozostanie otwarte, dopóki plik wsadowy nie zostanie zamknięty.

Co można zrobić, to podjąć kroki, aby upewnić się, że plik wsadowy wychodzi tak szybko, jak to możliwe. Jeśli to możliwe, zmodyfikuj plik wsadowy, aby uruchomić dowolny program z startpoleceniem. Domyślnie startwraca natychmiast, nie czekając na zamknięcie programu, więc plik wsadowy będzie nadal działał i prawdopodobnie natychmiast zakończy działanie. W połączeniu ze zmodyfikowaniem skrótu, aby uruchomić plik wsadowy zminimalizowany, zobaczysz tylko pasek zadań migający, nawet nie widząc okna na ekranie.

Jednym zastrzeżeniem jest to, że jeśli używasz programu w trybie konsoli, którym jest wiele interpreterów skryptów, plik wsadowy będzie czekał na zakończenie programu, a użycie startspowoduje odrodzenie nowego okna konsoli. W tym przypadku musisz uruchomić wersję interpretera opartą na Windows zamiast konsoli - nie jest to startkonieczne. W przypadku Perla uruchomiłeś wperl.exezamiast perl.exe. W przypadku Pythona jest to pythonw.exezamiast python.exe. Pobrana przeze mnie stara dystrybucja Ruby Win32 rubyw.exe, która powinna zrobić to samo.

Ostatnią możliwością jest użycie narzędzia innej firmy do uruchomienia wiersza polecenia z ukrytym oknem. Słyszałem o takich rzeczach, ale nigdy nie miałem z nich pożytku, więc nie znam niczego konkretnego, co mogłoby cię wskazać.

afrazier
źródło
Dzięki, że odpowiada na moje pytanie. Naprawdę denerwujące nie było to, że pojawiło się okno zachęty, ale musiało ono pozostać otwarte, dopóki program był uruchomiony. Teraz flash jest całkowicie znośny i nie tak irytujący. Sprawdzę, czy mogę zmodyfikować skrypt, aby uruchamiał rubyw zamiast ruby.
Jake
1
Wielkie dzięki za wyjaśnienie różnicy między „python” a „pythonw” - w końcu znalazłem rozwiązanie do uruchomienia narzędzi do okna python, które mamy bez wiersza polecenia w tle.
FP
´java.exe´ i ´javaw.exe´ są takie same.
redbeam_
Możesz - po prostu nie w samym kodzie wsadowym. naprawdę jest tutaj wiele
pytań z pytaniem
21

Myślę, że jest to najłatwiejsze i najkrótsze rozwiązanie do uruchamiania pliku wsadowego bez otwierania okna DOS, może być bardzo rozpraszające, gdy chcesz zaplanować okresowe uruchamianie zestawu poleceń, więc okno DOS ciągle się wyświetla, oto twoje rozwiązanie . Użyj skryptu VB, aby wywołać plik wsadowy ...

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

Skopiuj powyższe wiersze do edytora i zapisz plik z rozszerzeniem .VBS. Edytuj odpowiednio nazwę pliku i ścieżkę .BAT. Następnie wystarczy uruchomić plik .vbs i magia się dzieje!

indago
źródło
8

Możesz uruchomić inny plik wsadowy za pomocą START / MIN CMD.EXE / C mybatchfile.bat z poziomu wiersza polecenia.

Z zewnątrz pojawi się okno konsoli cmd, ale aby tego uniknąć, możesz utworzyć plik skrótu z właściwościami zmodyfikowanymi w celu zminimalizowania .

Vhanla
źródło
2
W Windows 8.1 ta opcja znajduje się we Właściwościach -> zakładka Skrót -> Uruchom: -> Zminimalizowane (domyślnie „Normalne okno”)
pix
5

Aby to zrobić, użyj programu Bat To Exe Converter, aby przekonwertować plik wsadowy na plik wykonywalny.

Podczas konwersji do pliku wykonywalnego znajdziesz opcję uruchomienia pliku jako aplikacji niewidocznej w sekcji widoczności. Tak więc, kiedy go uruchomisz, będzie działał bez okna.

Bat to exe

Nie rootuj tutaj, proszę ...
źródło
Strona wymaga od twojego komputera „rozwiązania” captcha kryptograficznego. Oto program nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks
4

Kontynuując odpowiedź Dennisa Williamsona, możesz edytować plik wsadowy i dołączać (poprzedzać) START /Bdo wykonywanego polecenia.

Na przykład mam plik wsadowy, który uruchamia szpachlę i miałem ten sam problem (dodatkowe CMD), więc tak to napisałem:

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

Działa idealnie.

Adonis Darwish
źródło
4

Wypróbuj to:

START /B batchfile

notatka dodana przez barlop

początek /? mówi o / 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.
Dennis Williamson
źródło
3
Może to działać, jeśli mam otwarty wiersz polecenia, ale kiedy używam .bat, dwukrotnie go klikam lub skrót do niego na pulpicie. Staram się unikać konieczności posiadania wiersza polecenia, aby uruchomić ten program.
Jake,
3

Nie jestem pewien co do twojego problemu, ale w przypadku niektórych moich plików wsadowych używam „manekina”, którego jedynym celem jest uruchomienie głównego pliku wsadowego.

GO.BAT będzie miał:

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

Wyjście zamyka okno wiersza poleceń, które w innym przypadku pozostałyby otwarte.

A GO2.BAT będzie zawierał zawartość pliku wsadowego, której chciałbym.

  @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
źródło
3

Możesz użyć RunHiddenConsole

hideExec.bat

@echo off
RunHiddenConsole batch.bat
Jens A. Koch
źródło
1

Jeśli nadal nie chcesz pokazywać okna konsoli, oto rozwiązanie z stackoverflow, które działało dla mnie (w moim przypadku nie wpisałem niczego do rejestru, ale tam, gdzie było to potrzebne).

raviolli
źródło
0

Wystarczy umieścić przełącznik / b przed ścieżką. Nie otworzy drugiego wiersza polecenia.

Jesse
źródło
0

Jak dotąd odpowiedź Indago była dla mnie najlepszym rozwiązaniem. Plik VBS pozwala mi uruchomić funkcjonalność partii za pomocą skryptu, zapobiegając przede wszystkim działaniu okna CMD. Jest jednak kilka zastrzeżeń:

  1. Jeśli partia wymaga uprawnień administratora, utwórz lub użyj istniejącej partii, która wywołuje VBS i uruchom ją jako Administrator.

  2. Bez widoczności może być trudno stwierdzić, czy to, co próbujesz zrobić, działa tak, jak chcesz.

Mając to na uwadze, najpierw zintegruję trochę próbnej konfiguracji / testu jednostkowego, aby upewnić się, że działa dokładnie tak, jak chcesz, zanim go zintegrujesz.

kayleeFrye_onDeck
źródło
0

Użyłem cmdow w przeszłości, i wydaje się, że pracował na to, co chcę.

Prawdopodobnie będziesz chciał użyć jednej z następujących opcji: CMDOW [window] /HID

/HID ukrywa określone okno

CMDOW [window] /END

/END zamyka określone okno

CMDOW [window] /CLS

/CLS uprzejmie poprosił okno o zamknięcie (niektóre okna mogą otwierać okno dialogowe)

Mam nadzieję że to pomoże.

sonrad10
źródło
-5

Po prostu zrób skrót do pliku wsadowego, kliknij go prawym przyciskiem myszy, kliknij Properties, przejdź do Generalkarty, zaznacz pole o nazwie Hidden, kliknij, Applya następnie OK.
Teraz, gdy otworzysz skrót, uruchomi on plik wsadowy Ukryty.

MagicalDiamonds
źródło
Jest to błędne, ponieważ po prostu ukrywa plik skrótu / pliku wsadowego, podczas gdy użytkownik chce, aby plik wsadowy działał niewidocznie.
Nie rootuj tutaj, proszę ...