Jak uruchomić plik wsadowy bez uruchamiania „okna poleceń”? [duplikować]

131

To pytanie ma już odpowiedź tutaj:

Czy w systemie Windows XP mogę uruchomić plik wsadowy (.bat lub .cmd) za pomocą skrótu bez „czarnego okna”?

dugres
źródło
6
Czy pytasz, czy możesz zapobiec wyświetlaniu okna poleceń po uruchomieniu pliku nietoperza?
Eric
6
Tak, możesz łatwo zmienić domyślny kolor okna wyjściowego, używając Właściwości w skrócie cmd.exe. (tak, to żart ...)
Toby J

Odpowiedzi:

86

Zapisz następujące elementy jako wscript, na przykład hidecmd.vbs po zamianie pliku „testing.bat” na nazwę pliku wsadowego.

Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false

Drugim parametrem oShell.Runjest intWindowStylewartość wskazująca wygląd okna programu, a wartość zerowa dotyczy okna ukrytego.

Referencje znajdują się tutaj http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx

Sharjeel Aziz
źródło
Czy trzecia linia to: strArgs = "cmd / c FILEPATH \ testing.bat"?
Dan Z
1
W jakikolwiek sposób uruchomić nietoperza w trybie podwyższonym, pozostając niewidocznym?
Laurens Swart
Jak uruchomić .batplik jako administrator przy użyciu tej metody?
Mehdi Dehghani
44

To tylko uproszczenie odpowiedzi Shaji. Możesz uruchomić skrypt wsadowy za pomocą skryptu VBScript (.vbs) w następujący sposób:

'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True

Spowoduje to wykonanie pliku wsadowego bez pokazanego okna poleceń.

wilk
źródło
Jak uruchomić .batplik jako administrator przy użyciu tej metody?
Mehdi Dehghani
@MehdiDehghani properties> bezpieczeństwo> uruchom jako administrator. Jeśli to działa tylko dla exe lub aplikacji, to oh wells.
Taylor Spark
21

Aby rozwinąć odpowiedzi „Użyj skryptu systemu Windows” (które uważam za najlepsze, ponieważ jest już wbudowane), oto jak to zrobić, używając pojedynczego skryptu opakowania i przekazując nazwę „rzeczywistego” pliku wsadowego jako parametru. Dodatkowe parametry zostaną przekazane do pliku wsadowego.

If WScript.Arguments.Count >= 1 Then
    ReDim arr(WScript.Arguments.Count-1)
    For i = 0 To WScript.Arguments.Count-1
        Arg = WScript.Arguments(i)
        If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
      arr(i) = Arg
    Next

    RunCmd = Join(arr)
    CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If

Tak np. Zapisz NoShell.vbsgdzieś powyższy plik, a następnie wywołaj:

NoShell.vbs c:\foo\my_batch_file.bat

Wreszcie, jeśli chcesz uruchomić to z miejsca, które nie rozumie pliku .vbs (takiego jak „Narzędzia zewnętrzne” w Visual Studio), będziesz chciał wywołać C:\Windows\System32\wscript.exeplik vbs jako pierwszy parametr, a Twój plik wsadowy jako drugi.

Toby J.
źródło
6
Dla tych, którym nie podoba się pomysł i pomysł stworzenia nowego pliku VBS dla każdego nowego pliku nietoperza, który tworzysz, ponieważ musisz użyć jednej z dwóch pierwszych odpowiedzi, jest to idealne rozwiązanie. Zamiast wielu plików VBS będziesz mieć wiele skrótów. Dla każdego nowego pliku nietoperza utwórz skrót pliku vbs, kliknij go prawym przyciskiem myszy, wybierz właściwości> karta Skróty, aw polu Cel wprowadź ścieżkę pliku nietoperza po ścieżce, która już tam jest, tak jak pokazano powyżej lub podobnie jeśli ten skrót nie jest w tym samym miejscu co plik VBS: "C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat.
Rolo
Jeśli ścieżka do pliku bat ma spację, jak można go wywołać za pomocą skrótu do pliku VBS? Na przykład: "C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat. Bez względu na to, czego szukam dla ścieżki - podwójne cudzysłowy wokół tego,% 20 zamiast miejsca lub kombinacja tych dwóch, nic nie działa. Otrzymuję komunikat o błędzie informujący, że nie można znaleźć pliku lub nic się nie dzieje. Czy jest to spowodowane błędem użytkownika po mojej stronie, ograniczeniem systemu Windows z polem docelowym dla skrótów lub problemem ze skryptem vbs, w którym nie obsługuje poprawnie ścieżek plików ze spacjami?
Rolo
@Rolo Zaktualizowałem skrypt, aby jeśli którykolwiek z parametrów przychodzących miał spacje, otoczyłby go cudzysłowami. Będziesz więc chciał zawinąć ścieżkę do pliku wsadowego z cudzysłowami podczas wywoływania go, wtedy zostanie on uznany za pojedynczy argument i ponownie zawinie się przed wywołaniem.
Toby J
9

Możesz zmienić właściwości skrótu, aby uruchamiał się w trybie zminimalizowanym.

Aby uruchomić go całkowicie niewidocznie, potrzebujesz czegoś innego, takiego jak Windows Scripting.

ale
źródło
1
Twoja pierwsza sugestia to sposób, w jaki zawsze to robiłem.
martineau,
8

Użyj opcji Rozpocznij z opcją „/ B”. Na przykład:

@echo off
start /B go.bat
zaf
źródło
25
start /bpo prostu uruchomi program w aktualnie przydzielonej konsoli zamiast odradzania nowej. I tak dostaniesz nowy, ponieważ partia musi działać z cmd (co z kolei [niespodzianka] otwiera konsolę).
Joey,
@Joey tak, ale jest to bardzo przydatne do uruchamiania plików wsadowych z innych aplikacji poprzez wykonywanie powłoki (jak SYSTEMw C / C ++).
Tomáš Zato
1
@ TomášZato: Możesz po prostu wywołać plik wsadowy bezpośrednio w tym przypadku lub, jeśli cokolwiek użyjesz do odrodzenia procesu, najpierw nie tworzy powłoki, użyj cmd /c foo.cmd. W starttych scenariuszach nie ma absolutnie żadnej potrzeby , i twierdzę, że systemnie należy tego używać na korzyść CreateProcess. Uruchamiając plik wsadowy, jesteś już zależny od jednej platformy, możesz równie dobrze użyć lepszych narzędzi do tego zadania.
Joey,
@Joey Wielkie dzięki, o których nigdy wcześniej nie słyszałem cmd /c. Polecenie cmd jest tym, czego potrzebowałem w moim przypadku, ale wszystkie dotychczasowe odpowiedzi
wymiany stosu
start /b go.bat nie przydzieli nowej konsoli (tj. instancji conhost.exe - lub wątku w csrss.exe przed Windows 7). Będzie to jednak bałagan, ponieważ skrypt wsadowy jest uruchamiany z nową instancją cmd.exe, która jest dołączona do tej samej konsoli . Oba wystąpienia powłoki będą konkurować o odczyt danych wejściowych z konsoli, zwykle naprzemiennie. Potrzebuje /w(np. start /b /w go.bat), Aby poczekać na drugą instancję, co jest podobne do używania, cmd /cjeśli używa system. Ponadto, jeśli dzwonisz CreateProcess, uruchom go.batbezpośrednio. Nie ma takiej potrzeby cmd /c.
Eryk Sun,
6

Bezpłatne open source GPL „Utwórz ukryty proces”

http://www.commandline.co.uk/chp/

Microsoft Security Essentials i prawdopodobnie większość innych skanerów antywirusowych / złośliwych programów traktuje plik wykonywalny, chp.exe, jako wirusa, ponieważ ukrywa dowolny program przed wyświetlaniem okna lub przycisku paska zadań, tak jak robią to wirusy.

To nie jest wirus. Nie ukrywa na przykład procesu docelowego w menedżerze zadań. I oczywiście dołączony jest kod źródłowy, dzięki czemu można zobaczyć, że jest bardzo mały i nie robi nic, tylko uruchamia dowolny program, który mu dasz.

Nie musisz nawet ufać, że dołączony plik chp.exe naprawdę został zbudowany z tego źródła. Możesz odrzucić dołączony plik chp.exe i skompilować własny ze źródła, a wszystkie niezbędne do tego narzędzia są nawet darmowe i można je pobrać.


Możesz także utworzyć skrót do pliku .bat lub .cmd, a następnie kliknąć prawym przyciskiem myszy skrót, Właściwości, zakładkę Skrót, Uruchom: Zminimalizowany. Następnie w zaplanowanych zadaniach użyj bezpośrednio skrótu zamiast pliku .bat / .cmd. Zapobiegnie to wyskakiwaniu okna, ale nadal będzie wyświetlany przycisk paska zadań.

bkw
źródło
6

Możesz użyć skryptów okien, takich jak AutoIt .

Na przykład po prostu napisz to do edytora skryptów AutoIt. To dość proste

Run("C:\test\batchfile.bat", "", @SW_HIDE)

Jeśli chcesz uruchomić go w pętli,

$x=0
Do
 Run("C:\test\batchfile.bat", "", @SW_HIDE)
 Sleep(5000)
Until $x = 1

Skompiluj go jako .exe - i gotowe.


Podobnie w AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
Adrian Yeoh
źródło
5

Użyj ukrytego startu (kosztuje 20 USD)

Ukryty Start - uruchamiaj aplikacje i pliki wsadowe bez okna konsoli lub monitu UAC

Aplikacje konsolowe i pliki wsadowe są regularnie uruchamiane podczas uruchamiania systemu Windows lub zgodnie z harmonogramem. Główną niedogodnością tego jest to, że każda aplikacja otwiera okno konsoli, które migocze na ekranie. Hidden Start (lub Hstart) to lekkie narzędzie wiersza poleceń, które pozwala uruchamiać aplikacje konsoli i pliki wsadowe bez żadnego okna w tle, obsługiwać podniesienie uprawnień UAC w Windows 7 i Vista, uruchamiać wiele poleceń równolegle lub synchronicznie i wiele więcej .

wprowadź opis zdjęcia tutaj

Kyle A.
źródło
Jest to bardzo ładnie zaprojektowana i przydatna aplikacja.
Guru Josh
5

Proste rozwiązanie bez użycia dodatkowych programów.

  1. Utwórz plik wsadowy, który chcesz uruchomić, i przetestuj go.
  2. Utwórz dla niego skrót.
  3. Edytuj właściwości skrótu: na karcie Skrót wybierz Uruchom zminimalizowany. Przypisz do niego klawisz skrótu i ​​gotowe!

Powodzenia!

Willem
źródło
7
To nie jest rozwiązanie problemu PO. Istnieje różnica między minimalizowaniem a ukrywaniem
nixda,
Jeśli zmienisz skrót, aby użyć właściwej ikony, zminimalizowane rozbicie na pasku zadań jest naprawdę miłym przypomnieniem, że coś się zaczyna.
Ktokolwiek
To dobre i czyste rozwiązanie mojego problemu! Dziękuję Ci!
dmitry_romanov
minimalizowanie ... hehe.
gumuruh