pengembangan-web-mp-pd.com

Jalankan file .bat dalam tugas yang dijadwalkan tanpa jendela

Saya memiliki tugas terjadwal yang memulai skrip batch yang menjalankan robocopy setiap jam. Setiap kali menjalankan jendela muncul di desktop dengan output robocopy, yang saya tidak ingin melihat.

Saya berhasil membuat jendela tampak diminimalkan dengan membuat pekerjaan yang dijadwalkan berjalan

cmd /c start /min mybat.bat

tapi itu memberi saya jendela perintah baru setiap jam. Saya terkejut dengan ini, mengingat cmd /c "Melakukan perintah yang ditentukan oleh string dan kemudian mengakhiri" - Saya pasti telah salah mengerti dokumen.

Apakah ada cara untuk menjalankan skrip batch tanpa muncul jendela cmd?

144
Tom Dunham

Anda bisa menjalankannya diam-diam menggunakan file Windows Script sebagai gantinya. Metode Jalankan memungkinkan Anda menjalankan skrip dalam mode tidak terlihat. Membuat .vbs file seperti ini

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

dan jadwalkan. Argumen kedua dalam contoh ini menetapkan gaya jendela. 0 berarti "sembunyikan jendela."

Sintaks lengkap metode Jalankan :

 object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

Argumen:

  • objek: objek WshShell.
  • strCommand: Nilai string yang menunjukkan baris perintah yang ingin Anda jalankan. Anda harus memasukkan parameter apa pun yang ingin Anda sampaikan ke file yang dapat dieksekusi.
  • intWindowStyle: Opsional. Nilai integer yang menunjukkan tampilan jendela program. Perhatikan bahwa tidak semua program memanfaatkan informasi ini.
  • bWaitOnReturn: Opsional. Nilai Boolean yang menunjukkan apakah skrip harus menunggu program untuk menyelesaikan eksekusi sebelum melanjutkan ke pernyataan berikutnya dalam skrip Anda. Jika disetel ke true, eksekusi skrip terhenti hingga program selesai, dan Run mengembalikan kode kesalahan apa pun yang dikembalikan oleh program. Jika disetel ke false (default), metode Run kembali segera setelah memulai program, secara otomatis mengembalikan 0 (tidak ditafsirkan sebagai kode kesalahan).
145
splattne

Apakah Anda menjalankan ini sebagai tugas yang dijadwalkan? Jika demikian atur agar dijalankan sebagai akun pengguna yang berbeda maka itu tidak akan terlihat oleh pengguna yang masuk. Jika skrip tidak memerlukan akses jaringan ke item yang memerlukan auth windows (seperti berbagi file atau printer), Anda dapat menjalankannya sebagai "nt authority\system" dan biarkan kata sandi kosong. Pada Windows 7, cukup atur pengguna ke SYSTEM, dan tekan OK.

(Anda mungkin harus menggunakan pengguna nyata jika Anda menggunakan robocopy ...)

JR

59
John Rennie

Cukup konfigurasikan Tugas Terjadwal sebagai "Jalankan apakah pengguna masuk atau tidak".

29
Peter Meinl

Anda juga dapat mencoba CHP (Buat proses tersembunyi) , melakukan persis seperti yang Anda pikirkan ...

CHP.EXE mybat.bat

Berjalan tanpa jendela perintah. Sempurna! Dibuat oleh orang yang sama dengan CMDOW, tetapi ini lebih tepat.

18
rocketmonkeys

CMDOW adalah alat awsome yang memungkinkan Anda melakukan banyak, banyak hal untuk windows dari baris perintah.

Salah satu hal paling sederhana yang harus dilakukan adalah menyembunyikan jendela saat ini (biasanya sebagai baris pertama dalam file bat) dengan:

cmdow @ /hid

atau memulai proses tersembunyi baru dengan

cmdow /run /hid mybat.bat 
9
itsadok

Coba gunakan skrip dengan

start /b <command>
5
rashfeather

Anda dapat membuat pintasan ke file kumpulan, mengatur pintasan untuk mulai diminimalkan (di properti pintasan, tab 'Pintasan'), dan kemudian mengatur pekerjaan untuk memulai pintasan.

Penting: Anda harus menentukan jalur ke pintasan secara manual dengan mengetiknya di bidang Run text, lengkap dengan ekstensi '.lnk'; jika Anda hanya mencoba menjelajahinya, itu akan sangat membantu mengarahkan dirinya sendiri ke apa pun yang ditunjukkan pintasan.

5
Doug Kavendek

Saya menyadari pertanyaan ini telah dijawab dengan resolusi yang sangat baik yang asli untuk Windows dan karenanya harus yang paling kompatibel, dan saya setuju sepenuhnya.

Saya juga ingin mengatakan bahwa saya tidak setuju dengan komentar @ splattne (tetapi bukan jawaban aktualnya) - bahwa resolusi di utas referensi lainnya layak mendapatkan pujian. Jawaban itu melibatkan menjalankan skrip sebagai pengguna yang berbeda (SISTEM), yang hampir setara dengan memberikan akses root skrip. Ini juga akan gagal untuk pekerjaan seperti ROBOCOPY (sebagaimana dirujuk oleh John Rennie), yang memerlukan akses jaringan.

Saya belum pernah mencoba CMDOW sebelumnya, tetapi saya ingin menawarkan resolusi serupa lainnya, yang [walaupun tidak diinstal secara bawaan pada Windows] masih sangat portable untuk sebagian besar versi, dan hadir dalam 32 dan 64- versi bit, dan itu NirCmd .

NirCmd adalah alat yang sangat kuat yang memiliki banyak sekali opsi, yang paling berguna, saya secara pribadi menemukan kemampuannya untuk meluncurkan jendela perintah tersembunyi dengan hanya menjalankan yang berikut:

c:\path\to\nircmd.exe exec hide "c:\path\to\mybat.bat"

Dari bagian exec dari Referensi Perintah NirCmd :

exec [show/hide/min/max] [application + command-line]

Menjalankan aplikasi, dan secara opsional tentukan satu atau lebih parameter baris perintah untuk aplikasi yang dieksekusi. Parameter [show/ hide /min/max] menentukan apakah aplikasi yang berjalan akan terlihat atau tidak. Jika 'sembunyikan' ditentukan, aplikasi yang sedang berjalan tidak akan terlihat oleh pengguna. Jika 'maks' ditentukan, jendela aplikasi yang berjalan akan dimaksimalkan. Jika 'min' ditentukan, jendela aplikasi yang berjalan akan diminimalkan.

EDIT: Saya mencoba menjalankan pekerjaan ROBOCOPY dan mencoba metode dalam jawaban ini, dan itu tidak berhasil, bahkan setelah mengedit hak akses jaringan. Saya mencoba mengklik dua kali skrip dan tidak dapat membuatnya berfungsi, tetapi hanya bisa menjalankannya di bawah Prompt perintah yang ditinggikan. Saya memang membuat jalan pintas ke file batch dan menjalankannya sebagai Administrator dan bisa menjalankannya dengan mengklik dua kali, tetapi metode yang akhirnya saya gunakan adalah menjalankannya disembunyikan sebagai SISTEM (saya tahu, saya tahu) - tetapi ia bekerja dengan ROBOCOPY, berapa pun nilainya, selama file batch memiliki izin yang benar.

EDIT 2: Untuk beberapa alasan, itu tidak akan berfungsi sebagai SISTEM (mungkin hal akses jaringan yang dirujuk sebelumnya) - Saya hanya memperhatikan ini setelah benar-benar berjalan ROBOCOPY tanpa flag/L, yang pada dasarnya hanya simulasi dan [tampaknya] tidak benar-benar terhubung ke sistem jarak jauh, tetapi ketika saya menjalankan file batch dengan hak istimewa tertinggi dan memeriksa kotak yang tersembunyi, dan saya bisa masih menjalankannya sebagai pengguna yang masuk di latar belakang tanpa menampilkan jendela perintah, untuk apa pun ini layak bagi siapa pun.

1
rubynorails

Solusi lain yang saya gunakan adalah Hidden Start

0
SteveC