Jak mogę uruchomić program z pliku wsadowego bez pozostawienia otwartej konsoli po uruchomieniu programu?

184

Na razie mój plik wsadowy wygląda następująco:

myprogram.exe param1

Program uruchamia się, ale okno DOS pozostaje otwarte. Jak mogę to zamknąć?

Mister Dev
źródło
3
Prawdopodobnie powinieneś zmienić zaakceptowaną odpowiedź na jedną opublikowaną przez Marshalla.
Rev1.0

Odpowiedzi:

163

Możesz użyć słowa kluczowego exit. Oto przykład z jednego z moich plików wsadowych:

start myProgram.exe param1
exit
Patrick Desjardins
źródło
18
Zauważ, że nie przyniesie to miłych wrażeń, jeśli korzystasz z konsoli interaktywnie zamiast po prostu podwójnie kliknąć plik wsadowy. Zasadniczo nie ma potrzeby umieszczania exitw pliku wsadowym.
Joey,
27
Próbowałem tego polecenia w Win8. Nie jestem pewien, czy jest inaczej, ale pamiętaj, że musisz podać mu tytuł okna jako swój pierwszy parametr. Gdybym uruchomił go w sposób opisany przez Patricka, otworzyłby po prostu nowy start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
wiersz
9
Zauważ, że jeśli twoje polecenie zawiera spacje i umieścisz je w cudzysłowie, musisz dodać dodatkowy parametr cytowany przed nim, ponieważ START interpretuje pierwszy cytowany parametr jako nazwę okna, a tylko drugi parametr jako nazwę polecenia.
David Balažic
259

Użyj polecenia start, aby zapobiec oczekiwaniu pliku wsadowego na program. Pamiętaj tylko, aby umieścić pusty podwójny cudzysłów przed programem, który chcesz uruchomić po „Start”. Na przykład jeśli chcesz uruchomić program Visual Studio 2012 z polecenia wsadowego:

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

zwróć uwagę na podwójny cytat po uruchomieniu.

Marshall
źródło
55
@SharkAlley Właściwy format tostart <window name> <program name>
Kruug,
5
To jest poprawna odpowiedź. Dzięki, puste podwójne cudzysłowy są dokładnie tym, czego potrzebowałem.
Richard
Mam skrypt tworzenia kopii zapasowych, który uruchamiam co tydzień i co jakiś czas modyfikuję go nieco, starając się, aby a) zamknął program, b) utworzył kopię zapasową danych, c) uruchomił ponownie program i zamknął wiersz polecenia. W końcu otrzymałem wiersz polecenia do zamknięcia (również uniemożliwiłem uruchomienie kolejnej kopii zapasowej, musiałem zamknąć wiersz polecenia !!!).
NobleUplift
@NobleUplift: Dla mnie to działało, .. poniżej znajduje się dokładna linia, Start „” „C: \ Program Files (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe” &
Xinus
53

Spójrz na polecenie START, możesz to zrobić:

START rest-of-your-program-name

Na przykład ten plik wsadowy będzie czekał na zamknięcie notatnika:

@echo off
notepad c:\test.txt

Nie spowoduje to jednak:

@echo off
start notepad c:\test.txt
Lasse V. Karlsen
źródło
31

Z mojego własnego pytania :

start /b myProgram.exe params...

działa, jeśli uruchomisz program z istniejącej sesji DOS.

Jeśli nie, wywołaj skrypt VB

wscript.exe invis.vbs myProgram.exe %*

Metoda Run () Windows Script Host Run () przyjmuje:

  • intWindowStyle: 0 oznacza „niewidoczne okna”
  • bWaitOnReturn: false oznacza, że ​​pierwszy skrypt nie musi czekać na zakończenie drugiego skryptu

Oto invis.vbs:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
VonC
źródło
1
+1 Musi być łatwiejszy sposób, ale to jedyna odpowiedź, która mi się sprawdziła.
DN
Dzięki - ta flaga / b była dokładnie tym, czego szukałem.
ap
21

Jest to jedyna rzecz, która działała dla mnie, gdy próbowałem uruchomić klasę Java z pliku wsadowego:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

Możesz dostosować startkomendę do swojego projektu, postępując zgodnie z odpowiednią składnią:

Syntax
      START "title" [/Dpath] [options] "command" [parameters]

Key:
   title      : Text for the CMD window title bar (required)
   path       : Starting directory
   command    : The command, batch file or executable program to run
   parameters : The parameters passed to the command

Options:
   /MIN       : Minimized
   /MAX       : Maximized
   /WAIT      : Start application and wait for it to terminate
   /LOW       : Use IDLE priority class
   /NORMAL    : Use NORMAL priority class
   /HIGH      : Use HIGH priority class
   /REALTIME  : Use REALTIME priority class

   /B         : Start application without creating a new window. In this case
                ^C will be ignored - leaving ^Break as the only way to 
                interrupt the application
   /I         : Ignore any changes to the current environment.

   Options for 16-bit WINDOWS programs only

   /SEPARATE   Start in separate memory space (more robust)
   /SHARED     Start in shared memory space (default)
Zosimas
źródło
18

Powinieneś spróbować. Uruchamia program bez okna. W rzeczywistości miga na sekundę, ale szybko znika.

start "name" /B myprogram.exe param1
Chris Dail
źródło
4
"title"Opcja jest ważna. Jeśli ścieżka programu zawiera spacje, musi być ujęta w cudzysłów, dlatego musimy dodać, "title"aby uniknąć niepowodzenia.
AD
1
Jeśli zamkniesz okno główne, proces w tle „myprogram.exe” również się zamknie.
Aditya Gupta
14

Jak rozwiązać „problem z przestrzenią” i lokalne zależności:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe

cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe

exit
Gilco
źródło
To nie jest odpowiedź na pytanie
jeb
2
to prawda, ale myślę, że daje dobre rozwiązanie, które rozwiązuje również inne problemy, które miałem.
Gilco
2
To było dla mnie rozwiązanie. Okno Dos otwiera się, ale zamyka ponownie i rozwiązanie działa. Nie rozumiem opinii negatywnych (przegłosowałem)
JoeFox
Ja albo rozwiązanie działa i rozwiązuje problem
Gilco
2

Mnóstwo odpowiedzi na to pytanie już, ale piszę to, aby wyjaśnić coś ważnego, chociaż nie zawsze tak jest:

Start "C:\Program Files\someprog.exe"

Może to powodować problemy w niektórych wersjach systemu Windows, ponieważ Startfaktycznie oczekuje, że pierwszy zestaw znaków cudzysłowu będzie tytułem systemu Windows. Najlepszą praktyką jest najpierw podwójne zacytowanie komentarza lub pustego komentarza:

Start "" "C:\Program Files\someprog.exe"

lub

Start "Window Title" "C:\Program Files\someprog.exe"
Gerhard
źródło
0

Moje rozwiązanie, aby to zrobić z GUI:

  1. Utwórz skrót do programu, który chcesz uruchomić;

  2. Edytuj właściwości skrótu;

  3. Zmień TARGETpole na %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Zmień RUNpole na zminimalizowane.

Gotowy! Zobacz, jak ci się podoba ...

PS: Parametry programu można wstawić pomiędzy dwa końcowe znaki cudzysłowu; PROGRAMNAMEciąg może być zarówno nazwa pliku, krewny lub ścieżka bezwzględna - gdy włożysz bezwzględną ścieżkę i usunąć literę dysku i średnik, to będzie działać w thumbdrive Nieważne co pisma przypisuje komputer hosta do niego .. . (także, jeśli umieścić skrót w tym samym folderze i poprzedzić nazwę pliku programu w PROGRAMNAMEprzy %CD%zmiennej, ścieżki będzie zawsze pasuje; sama sztuczka może być stosowany w START INpolu).

Midas
źródło
0

Jeśli ten plik wsadowy jest czymś, co chcesz uruchomić zgodnie z harmonogramem lub zawsze; możesz użyć narzędzia do planowania systemu Windows i nie otwiera się ono w oknie, gdy uruchamia plik wsadowy.

Aby otworzyć Task Scheduler:

  • Start -> Uruchom / Wyszukaj -> 'cmd'
  • Wpisz taskschd.msc-> enter

Po prawej stronie kliknij Create Basic Taski postępuj zgodnie z menu.

Mam nadzieję że to pomoże.

Leustad
źródło
0

Oto moje preferowane rozwiązanie. Został zaczerpnięty z odpowiedzi na podobne pytanie.

Użyj skryptu VBS, aby wywołać plik wsadowy:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

Skopiuj powyższe wiersze do edytora i zapisz plik z rozszerzeniem .VBS.

Iljicz
źródło