Bagaimana cara menjalankan file batch tanpa meluncurkan "jendela perintah"? [duplikat]

131

Pertanyaan ini sudah ada jawabannya di sini:

Pada Windows XP, dapatkah saya menjalankan file batch (.bat atau .cmd), melalui pintasan, tanpa "jendela hitam"?

dugres
sumber
6
Apakah Anda bertanya apakah Anda dapat mencegah jendela perintah muncul ketika Anda menjalankan file bat?
Eric
6
Ya, Anda dapat dengan mudah mengubah warna default dari jendela output dengan menggunakan Properties pada pintasan cmd.exe. (ya ini lelucon ...)
Toby J

Jawaban:

86

Simpan yang berikut ini sebagai wscript, misalnya, hidecmd.vbs setelah mengganti "testing.bat" dengan nama file batch Anda.

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

Parameter kedua oShell.Runadalah intWindowStylenilai yang menunjukkan tampilan jendela program dan nilai nol adalah untuk jendela tersembunyi.

Referensi ada di sini http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx

Sharjeel Aziz
sumber
Apakah baris ketiga adalah: strArgs = "cmd / c FILEPATH \ testing.bat"?
Dan Z
1
Adakah cara untuk menjalankan kelelawar dalam mode tinggi sambil tetap tidak terlihat?
Laurens Swart
Bagaimana menjalankan .batfile sebagai administrator menggunakan metode ini?
Mehdi Dehghani
44

Ini hanya penyederhanaan jawaban Shaji. Anda dapat menjalankan skrip batch Anda melalui skrip VBScript (.vbs) seperti ini:

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

Ini akan mengeksekusi file batch Anda tanpa jendela perintah yang ditampilkan.

serigala besar
sumber
Bagaimana menjalankan .batfile sebagai administrator menggunakan metode ini?
Mehdi Dehghani
Properti @MehdiDehghani> keamanan> dijalankan sebagai admin. Jika itu hanya berfungsi untuk exe atau aplikasi, maka oh wells.
TaylorS
21

Hanya untuk memperluas jawaban "Gunakan Windows Scripting" (yang saya anggap terbaik karena sudah built-in) di sini adalah cara melakukannya dengan menggunakan skrip pembungkus tunggal dan meneruskan nama file batch "nyata" sebagai parameter. Parameter tambahan akan diteruskan ke file batch.

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

Jadi mis. Simpan file di atas sebagai NoShell.vbstempat, lalu panggil:

NoShell.vbs c:\foo\my_batch_file.bat

Akhirnya, jika Anda ingin menjalankan ini dari suatu tempat yang tidak memahami file .vbs (seperti "Alat Eksternal" di Visual Studio), Anda akan ingin memanggil C:\Windows\System32\wscript.exedengan file vbs sebagai parameter pertama dan Anda file batch sebagai yang kedua.

Toby J
sumber
6
Bagi mereka yang tidak menyukai ide & konsep harus membuat file vbs baru untuk setiap file bat baru yang dibuat, karena kita harus menggunakan salah satu dari dua jawaban teratas, ini adalah solusi sempurna. Alih-alih beberapa file vbs, Anda akan memiliki beberapa pintasan. Untuk setiap file bat baru, buat pintasan file vbs, klik kanan padanya, pilih properti> tab Shortcuts, & di kotak Target masukkan path file bat setelah path yang sudah ada, seperti yang ditunjukkan di atas atau seperti ini jika shortcut tersebut tidak di tempat yang sama seperti file vBS: "C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat.
Rolo
Jika path file file bat memiliki spasi, bagaimana bisa dipanggil melalui jalan pintas ke file vbs? Sebagai contoh: "C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat. Tidak peduli apa yang saya coba untuk jalur - kutip ganda di sekitar itu semua,% 20 di tempat ruang, atau kombinasi dari keduanya, tidak ada yang berhasil. Saya mendapatkan pesan kesalahan yang memberi tahu saya bahwa file tersebut tidak dapat ditemukan atau tidak ada yang terjadi. Apakah ini karena kesalahan pengguna di pihak saya, batasan Windows dengan bidang Target untuk pintasan, atau masalah dengan skrip vbs di mana ia tidak menangani jalur file dengan spasi dengan benar?
Rolo
@Rolo Saya telah memperbarui skrip sehingga jika ada parameter yang masuk memiliki spasi, ia akan mengelilinginya dengan tanda kutip. Jadi, Anda ingin membungkus path ke file batch dengan tanda kutip saat memanggilnya, maka itu akan dianggap sebagai argumen tunggal dan membungkus ulang sebelum dipanggil.
Toby J
9

Anda dapat mengubah properti pintasan untuk menjalankan diminimalkan.

Untuk menjalankannya sepenuhnya tanpa terlihat Anda akan membutuhkan sesuatu yang lain, seperti Windows Scripting.

bir
sumber
1
Saran pertama Anda adalah cara saya selalu melakukannya.
martineau
8

Gunakan mulai dengan opsi '/ B'. Sebagai contoh:

@echo off
start /B go.bat
zaf
sumber
25
start /bhanya akan menjalankan program di konsol yang saat ini dialokasikan bukannya melahirkan yang baru. Anda tetap akan mendapatkan yang baru karena batch harus dijalankan dengan cmd (yang, pada gilirannya [kejutan], membuka konsol).
Joey
@ Joey ya, tapi ini sangat berguna untuk meluncurkan file batch dari aplikasi lain melalui eksekusi shell (seperti SYSTEMdi C / C ++).
Tomáš Zato
1
@ TomášZato: Anda bisa memanggil file batch langsung dalam kasus itu, atau, jika apa pun yang Anda gunakan untuk menelurkan suatu proses tidak membuat shell terlebih dahulu, gunakan cmd /c foo.cmd. Sama sekali tidak perlu digunakan startdalam skenario itu, dan, saya berpendapat bahwa systemtidak boleh digunakan untuk mendukung CreateProcess. Dengan meluncurkan file batch, Anda sudah bergantung pada satu platform, Anda mungkin juga menggunakan alat yang lebih baik untuk pekerjaan itu.
Joey
@ Joey Terima kasih banyak, tidak pernah dengar cmd /csebelumnya. Perintah cmd adalah apa yang saya butuhkan dalam kasus saya, tetapi semua jawaban stackexchange yang saya temukan sejauh ini, tentang file batch yang menjalankan file batch lain, memiliki jawaban teratas untuk digunakan mulai ...
T_D
start /b go.bat tidak akan mengalokasikan konsol baru (yaitu instance dari conhost.exe - atau utas di csrss.exe sebelum Windows 7). Namun itu akan membuat kekacauan karena skrip batch dijalankan dengan instance baru dari cmd.exe yang dilampirkan ke konsol yang sama . Kedua instance shell akan bersaing untuk membaca input dari konsol, biasanya bergantian. Perlu /w(misalnya start /b /w go.bat) untuk menunggu contoh kedua, yang mirip dengan menggunakan cmd /cjika menggunakan system. Juga, jika Anda menelepon CreateProcess, jalankan go.batlangsung. Tidak perlu cmd /c.
Eryk Sun
6

Sumber terbuka GPL gratis "Buat Proses Tersembunyi"

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

Microsoft Security Essentials, dan mungkin sebagian besar pemindai virus / malware akan memperlakukan executable, chp.exe, sebagai virus karena menyembunyikan program apa pun yang Anda tentukan dari menampilkan jendela atau tombol bilah tugas, seperti halnya virus.

Itu bukan virus. Misalnya, itu tidak menyembunyikan proses target dari muncul di task manager. Dan tentu saja kode sumber disertakan sehingga Anda dapat melihatnya sangat kecil dan tidak melakukan apa pun selain menjalankan program apa pun yang Anda berikan.

Anda bahkan tidak perlu percaya bahwa chp.exe yang disertakan benar-benar dibuat dari sumber itu. Anda dapat melanjutkan dan membuang chp.exe yang disertakan dan kompilasi sendiri dari sumbernya, dan semua alat yang diperlukan untuk melakukannya bahkan gratis dan dapat diunduh.


Anda juga dapat membuat pintasan ke file .bat atau .cmd, lalu klik kanan pada pintasan, Properties, tab Shortcut, Run: Minimized. Kemudian dalam tugas yang dijadwalkan, gunakan pintasan alih-alih file .bat / .cmd secara langsung. Itu akan mencegah jendela dari muncul, tetapi tombol taskbar akan tetap muncul.

bkw
sumber
6

Anda dapat menggunakan skrip jendela seperti AutoIt .

Sebagai contoh, cukup tulis ini ke editor skrip AutoIt. Ini cukup sederhana

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

Jika Anda ingin menjalankannya dalam satu lingkaran,

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

Kompilasi sebagai .exe - dan Anda selesai.


Demikian juga, di AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
Adrian Yeoh
sumber
5

Gunakan Mulai Tersembunyi (biaya $ 20)

Tersembunyi Mulai - Menjalankan Aplikasi dan File Batch tanpa Jendela Konsol atau UAC Prompt

Aplikasi konsol dan file batch dijalankan secara teratur saat startup Windows atau dalam jadwal. Ketidaknyamanan utama ini adalah bahwa setiap aplikasi membuka jendela konsol yang berkedip di layar. Hidden Start (atau Hstart) adalah utilitas baris perintah ringan yang memungkinkan Anda untuk menjalankan aplikasi konsol dan file batch tanpa jendela di latar belakang, menangani peningkatan hak istimewa UAC di Windows 7 dan Vista, memulai beberapa perintah secara paralel atau serempak, dan banyak lagi .

masukkan deskripsi gambar di sini

Kyle A
sumber
Ini adalah aplikasi yang dirancang dengan sangat baik dan bermanfaat.
Guru Josh
5

Solusi sederhana, tanpa menggunakan program tambahan.

  1. Buat file batch yang ingin Anda jalankan dan mengujinya.
  2. Buat pintasan untuk itu.
  3. Edit properti pintasan: di tab Shortcut, pilih Run Minimized. Tetapkan hot key untuk itu dan Anda selesai!

Semoga berhasil!

Willem
sumber
7
Ini bukan solusi untuk masalah OP. Ada perbedaan antara Meminimalkan dan Menyembunyikan
nixda
Jika Anda mengubah pintasan untuk menggunakan ikon yang tepat, percikan yang diminimalkan pada bilah tugas sebenarnya adalah pengingat yang baik bahwa sesuatu sedang dimulai.
Siapa pun
Itu solusi yang bagus dan bersih untuk masalah saya ! Terima kasih!
dmitry_romanov
meminimalkan ... hehe.
gumuruh