Pertanyaan Jalankan file .bat dalam tugas terjadwal tanpa jendela


Saya memiliki tugas terjadwal yang memulai skrip batch yang berjalan robocopy setiap jam. Setiap kali menjalankan jendela muncul di desktop dengan output robocopy, yang saya tidak benar-benar 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 berakhir" - Saya pasti salah memahami dokumen.

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


139
2018-05-17 09:00




Saya menemukan ini jawaban yang lebih disukai stackoverflow.com/questions/6568736/… - Efekt


Jawaban:


Anda bisa menjalankannya dengan diam-diam menggunakan file Windows Script sebagai gantinya. Metode Jalankan memungkinkan Anda menjalankan skrip dalam mode tak 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 mengatur gaya jendela. 0 berarti "sembunyikan jendela."

Sintaks lengkap dari Jalankan metode:

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

Argumen:

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

142
2018-05-17 09:08



+1, tulis saja hal yang persis sama - Sam Cogan
Saya melihatnya sebelum Anda menghapusnya. Saya kira kita berdua bot. ;-) - splattne
nama pengguna, saya benar-benar berpikir bahwa Sam layak mendapat lebih dari saya. Tapi terima kasih juga! Dan jangan menyebut saya dan Jon Skeet dalam kalimat yang sama. Itu penghujatan! ;-) - splattne
Untuk pertanyaan "Apakah ada cara untuk menjalankan skrip batch tanpa memunculkan jendela cmd?", Ini memberikan jawaban yang sangat langsung: Jalankan menggunakan file Windows Script. - Mark Meuer
@Lee Saya kira tanda kutip ganda diperlukan jika jalan Anda mengandung spasi. - splattne


Apakah Anda menjalankan ini sebagai tugas yang dijadwalkan? Jika begitu mengaturnya untuk dijalankan sebagai akun pengguna yang berbeda maka itu tidak akan terlihat oleh pengguna yang login. 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 setel pengguna ke SYSTEM, dan tekan OK.

(Anda mungkin harus menggunakan pengguna sebenarnya meskipun jika Anda menggunakan robocopy ...)

JR


55
2018-05-17 09:13



Terima kasih - ini lebih mudah bagi saya daripada opsi .vbs. - mackenir
Saya mengatur pengguna "Run as" ke SYSTEM (yang kemudian berubah menjadi NT AUTHORITY \ SYSTEM) dan itu berhasil bagi saya. Saya tidak lagi melihat jendela CMD popup ketika tugas terjadwal saya berjalan. Terima kasih! - Ryan Stille
+1, ini elegan. Pastikan untuk memasukkan "sistem" sebagai nama pengguna, kemudian win7 melakukan sisanya untuk Anda. Perhatikan bahwa Anda mendapatkan akses jaringan ke internet, hanya tidak untuk berbagi jaringan dan hal-hal yang perlu auth windows. - samsmith
Pengguna sistem sederhana dan elegan, TIP yang hebat! +1! - Matteo Conta
Lihat Menerapkan Model Administrasi Least-Privilege. Apakah penggunaan akun Sistem untuk ini melanggar kebijakan Least-Privilege? Jika demikian maka administrator harus tahu tidak melakukan ini dalam banyak situasi. - user34660


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


27
2017-10-04 20:06



Sempurna! Anda bahkan dapat menonaktifkan penyimpanan kredensial dan kemudian ini menjadi lebih aman daripada memiliki SISTEM menjalankannya! - binki


Anda juga bisa mencoba CHP (Buat proses tersembunyi), tepatnya apa yang kau pikirkan ...

CHP.EXE mybat.bat

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


17
2017-07-20 21:54



Bekerja dengan sempurna ketika Anda perlu menjalankan tugas dalam konteks pengguna yang masuk ("Trigger: on connect to user session", "Jalankan tugas sebagai: Pengguna") - Sergei
ini bukan alat bawaan - Jonny Leeds


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

Salah satu hal paling sederhana untuk 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
2018-05-17 11:30



Kedua saran ini dan Rocketmonkeys melibatkan pengunduhan alat-alat baru, yang berarti lebih banyak kompatibilitas terhadap berbagai desktop masyarakat. Dipanggang, menggunakan perintah windows jauh lebih baik. - IanVaughan
Ditambah cmdow terdeteksi sebagai "berbahaya" oleh beberapa program anti-virus (ini tidak berbahaya, tetapi deteksi itu sendiri dapat menyebabkan beberapa masalah jika file cmdow dikarantina ...). - Otiel
masih ada konsol popup, cukup flash sangat cepat. - Bamboo


Coba jalankan skrip dengan

start /b <command>

5
2018-05-17 14:54



Ini tidak berfungsi, Tugas Terjadwal-> Status menyatakan "Tidak dapat memulai", yaitu dengan: start / b C: \ file.bat: dan: start / b "C: \ file.bat": tetapi: C: \ file.bat: berfungsi dengan baik. - IanVaughan
Karena start bukan sebuah program, itu adalah sebuah perintah. Anda perlu menentukan cmd sebagai program untuk menjalankan dan /c start /b <file> sebagai argumennya. Namun, ini masih belum berfungsi karena masih akan membuat jendela konsol untuk cmd dan flash jendela hitam di layar. - Synetech
Juga dapat mengkonfirmasi dengan @Synetech bahwa ini tidak akan membuat jendela baru, tetapi Anda masih perlu membuka jendela konsol untuk memulainya. Ini memang perintah yang praktis, tetapi tidak dapat digunakan seperti yang diminta dengan Tugas Terjadwal. - JonathanDavidArndt


Anda dapat membuat pintasan ke file batch, mengatur pintasan untuk memulai diminimalkan (pada properti shortcut, tab 'Shortcut'), dan kemudian mengatur pekerjaan untuk memulai pintasan.

Penting: Anda harus menentukan jalur ke pintasan secara manual dengan mengetikkannya ke dalam kolom Jalankan teks, lengkap dengan ekstensi '.lnk'; jika Anda hanya mencoba menjelajahinya, itu akan sangat membantu redirect sendiri ke titik pintas apa pun.


5
2017-08-11 16:49



Ini tidak berfungsi pada Windows 10 x64, ini memberikan popup "Bagaimana Anda ingin membuka file ini?" - Jan


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

Saya juga ingin mengatakan bahwa saya tidak setuju dengan komentar @ splattne (tetapi bukan jawaban sebenarnya) - bahwa resolusi dalam rujukan lain yang pantas mendapat pujian. Jawaban itu melibatkan menjalankan skrip sebagai pengguna yang berbeda (SISTEM), yang hampir setara dengan memberikan akses root script. Ini juga akan gagal untuk pekerjaan seperti ROBOCOPY (Seperti yang direferensikan oleh John Rennie), yang membutuhkan akses jaringan.

Saya belum pernah mencoba CMDOW sebelumnya, tetapi saya ingin menawarkan resolusi lain yang serupa, yang [meskipun tidak terpasang secara asli di Windows] masih sangat portabel untuk sebagian besar versi, dan hadir dalam versi 32 dan 64-bit, dan itu adalah NirCmd.

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

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

Dari exec bagian dari Referensi Perintah NirCmd:

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

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

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

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


1
2018-05-01 03:38





Solusi lain yang saya gunakan adalah Mulai Tersembunyi


0
2017-07-01 07:38





Coba masukkan perintah keluar di akhir file batch Anda. Ini harus menutup jendela perintah saat skrip selesai.


-2
2017-08-13 11:58