Jalankan file batch dengan cara yang sepenuhnya tersembunyi

139

Saya mencari beberapa cara untuk menjalankan file batch (.bat) tanpa ada yang terlihat oleh pengguna (tidak ada jendela, tidak ada nama taskbar, .etc ..).

Saya tidak ingin menggunakan beberapa program untuk melakukan itu, saya mencari sesuatu yang lebih bersih. Saya telah menemukan solusi yang menggunakan VBScript, tetapi saya juga tidak terlalu suka menggunakan VBS.

Moayad Mardini
sumber
Ha ha! Tentu saja tidak. Saya mengembangkan layanan Windows yang akan menjalankan file batch setiap sekarang dan kemudian.
Moayad Mardini
4
Layanan Windows tidak berjalan sebagai file batch. Mereka dijalankan sebagai layanan. Anda perlu mengklarifikasi pertanyaan - seperti yang ditulis dan dengan komentar itu tidak masuk akal bagi saya.
CarlF
1
Saya memiliki layanan Windows yang menjalankan file batch. Bukan berarti layanan ini adalah file batch.
Moayad Mardini
1
Anda menggunakan bahasa apa untuk layanan ini?
Hugh Allen
ada hstart juga.
barlop

Jawaban:

119

Solusi 1:

Simpan satu baris teks ini sebagai file invisible.vbs:

CreateObject ("Wscript.Shell"). Jalankan "" "" & WScript. Dokumen (0) & "" "", 0, Salah

Untuk menjalankan program atau file batch apa pun tanpa terlihat, gunakan seperti ini:

wscript.exe "C: \ Dimanapun \ invisible.vbs" "C: \ Some Other Place \ MyBatchFile.bat"

Agar dapat meneruskan / menyampaikan daftar argumen, gunakan hanya dua tanda kutip ganda

CreateObject ("Wscript.Shell"). Jalankan "" & WScript. Dokumen (0) & "", 0, Salah

Contoh: Invisible.vbs "Kill.vbs ME.exe"

Solusi 2:

Gunakan alat baris perintah untuk meluncurkan proses secara diam-diam: Diam , hidecon atau hideexec .

harrymc
sumber
2
Mengapa 4 tanda kutip ganda, bisa tolong jelaskan?
Starx
Bagaimana jika kita perlu memulai program yang disembunyikan?
Starx
5
Sintaks @Starx VB. &berarti string gabungan. String diapit dengan tanda kutip ganda ( "). Kutipan ganda berturut-turut ( "") di dalam pembatas string berarti kutipan ganda literal ( "). Jadi, empat kutipan ganda ( """") akan menjadi string literal dari satu karakter, kutipan ganda ( "). Menyatukannya, dan """" & WScript.Arguments(0) & """"akan menjadi "<argument>", di mana <argument>argumen baris perintah pertama dilewatkan ke skrip.
Bob
4
Bagaimana memodifikasinya sehingga melewati semua argumen? Akan lebih mudah untuk melewati argumen tanpa mengutipnya.
Ctrl-C
2
Bukankah ini masih mengharuskan Anda untuk membuat file batch untuk meletakkan bagian wscript.exe "C:\Wherever\invisible.vbs" ...dalamnya?
endolith
26

Untuk Menyembunyikan file batch atau file perintah atau file apa pun .... Gunakan IExpress.exeutilitas bawaan Windows XP untuk membangun .EXE dari file batch. Saat menggunakan IExpresspastikan Anda menandai opsi run hidden dan tandai semua kotak untuk tidak menampilkan apa pun. Setelah Anda membuat .exe, letakkan di folder perintah jalankan apa pun yang Anda pilih dan Anda tidak akan pernah melihatnya.

Paul Cheselske
sumber
1
Oh, solusi yang bagus sebenarnya.
Camilo Martin
7
apakah ada yang setara dengan lexpress.exe di versi windows yang lebih baru seperti windows 7?
Sнаđошƒаӽ
@ Sнаđошƒаӽ Ada di windows 7 .... baru saja mengujinya
DarthRubik
@DarthRubik Terima kasih telah berbagi itu. Saya juga mengujinya dan berfungsi dengan baik. Saatnya menjawab dengan terbalik. :)
Sнаđошƒаӽ
Ini tampaknya tidak berfungsi pada Windows 10 64 karena "Command.com" tampaknya tidak lagi hadir
Arne S
10

use Cmdow adalah utilitas baris perintah Win32 untuk NT4 / 2000 / XP / 2003 yang memungkinkan windows untuk didaftar, dipindahkan, diubah ukurannya, dinamai / tidak disembunyikan, dinonaktifkan / diaktifkan, diminimalkan, dimaksimalkan, dipulihkan, diaktifkan, tidak diaktifkan, ditutup, dibunuh dan lebih.

Jalankan file batch yang tersembunyi melewati parameternya: -

cmdow / run / hid mybat arg1 "arg 2"

joe
sumber
Tetapi bagaimana saya menjalankan perintah ini?
Moayad Mardini
9
cmdow terdeteksi sebagai malware oleh sebagian besar produk antivirus. Karenanya akan sulit untuk menggunakan solusi ini di tempat-tempat selain PC Anda sendiri.
Ganesh R.
@ Ganesh: Ada solusi yang lebih baik?
Moayad Mardini
Apakah ini open source? Tidak ada gunanya menggunakan aplikasi pihak ketiga yang bukan open source dan bisa mengemas trojan ketika Anda bisa melakukan hal yang sama dengan menjalankan vbscript 1 baris harrymc (lihat dia menjawab di bagian atas utas).
thebunnyrules
1
Yah, ini open source, jadi itu cukup luar biasa. Bisa mendapatkan kode sumber di sini: github.com/ritchielawrence/cmdow
thebunnyrules
9

Jika File Batch Anda dapat masuk ke dalam satu baris dan begitu banyak karakter, maka cukup gunakan Shortcut dengan mengklik kanan di dalam folder yang dimasukkan ke dalam direktori acak, dan melewati sisa wizard, dan terakhir klik kanan pada shortcut yang baru saja dibuat dan klik properti dan di bawah target, masukkan apa yang biasanya Anda masukkan ke file bat. Dan bobs pamanmu!

Pro:

 No Command Window
 Ability to use an icon
 Same Functionality of bat file

Kekurangan:

 Limited to one line, so many characters
Jack S
sumber
Satu-satunya masalah adalah Anda tidak dapat mengaitkan tipe file dengan pintasan. Jadi, jika Anda ingin membuka skrip batch dengan mengekliknya dua kali di explorer Anda masih memerlukan file .bat.
Björn Lindqvist
Saya masih berusaha menemukan Paman Bob, ada di sini di mana saja !!
Pimp Juice ITU
7

Jalankan skrip melalui at a job tanpa membuatnya interaktif:

at 11:00 script.bat

Solusi lain, jika Anda tidak keberatan menginstal sesuatu seperti Python, Anda bisa membuat skrip dan menjalankannya pythonw(versi tertaut untuk operasi GUI). Karena Anda tidak menggunakan API grafis apa pun, jendela tidak akan ditampilkan. Cukup gunakan panggilan ke os.system()dan itu akan meniru skrip batch, karena sama dengan mengetikkan string ke dalam baris perintah.

Contoh:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
John T
sumber
3
Tetapi bagaimana saya menjalankan perintah ini?
Moayad Mardini
Anda harus menjadwalkan tugas yang dijadwalkan atau menulis layanan.
Unfundednut
contoh ditambahkan.
John T
6

Anda dapat menjalankannya seminimal mungkin.

start /MIN batch.cmd
Brad Gilbert
sumber
3
atau gunakan / B sebagai gantinya!
rany
6

Menggunakan Windows7, Anda dapat menggunakan panel kontrol "Tugas Terjadwal" untuk menjadwalkan file batch untuk berjalan di latar belakang tanpa terlihat dengan izin yang ditentukan dan bahkan sebagai akun "SISTEM". Lihat tangkapan layar di bawah ini:

masukkan deskripsi gambar di sini

Selain itu, meskipun dengan kemampuan yang tidak banyak, Anda juga dapat membuat tugas skrip batch tak terlihat seperti ini dari baris perintah menggunakan perintah "AT.exe" tanpa opsi '/ interaktif'.

Djangofan
sumber
3
Kotak centang tersembunyi hanya menyembunyikan tugas dari antarmuka pengguna Penjadwal Tugas (
Sourav Ghosh
Menjalankan tugas sebagai "SISTEM" ketika tidak membutuhkan hak istimewa "SISTEM" (dan belum diteliti untuk kelemahan keamanan, dan diperkeras) sebagai ide yang buruk; lihat komentar di sini .
Scott
6

Saya tidak suka solusi VBScript.

Unduh dan salin nircmd.exe ke %systemroot%\system32folder Anda , lalu tambahkan perintah ini ke baris pertama batch Anda:

nircmd.exe win hide ititle "cmd.exe"

atau buat judul batch Anda terlebih dahulu dengan titleperintah untuk menghindari menyembunyikan semua cmdjendela, seperti ini:

title MyBatch
nircmd.exe win hide ititle "MyBatch"
BijaN-R
sumber
Saya menggunakan metode yang tepat ini, tetapi gagal untuk beberapa waktu yang nircmd tidak menyembunyikan jendela cmd, hanya diminimalkan ke taskbar, dan tidak dapat dipulihkan dengan mengkliknya. Tidak tahu mengapa ...
James Yang
3

Anda juga dapat membuat skrip AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
endolith
sumber
3

BELUM JAUH cara lain, dari C / C ++, adalah dengan menggunakan fungsi CreateProcess dengan bendera CREATE_NO_WINDOW. Ini memiliki banyak kekuatan ekstra yang tidak ditampilkan di sini. Ini hanya minimum yang Anda butuhkan untuk mengganti keluarga system () atau _spawn ().

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
Swiss Frank
sumber
1
Jawaban yang benar untuk pendekatan WINAPI. Berikut adalah kode sumber dan aplikasi sebagai tambahan untuk jawaban Anda.
Alex
3

Yang sangat baik Bat Untuk Exe Converter akan mengkonversi Anda .batatau .cmdmengajukan ke .exeberkas.

Ini memiliki UI yang sederhana. Anda dapat memilih untuk tidak memiliki jendela konsol dengan memilih opsi “Aplikasi tak terlihat”. Selain itu, ini memungkinkan Anda untuk menetapkan ikon, paket file terkait, dan beberapa opsi lainnya.

Berikut screenshot dari jendela antarmuka utama:


Perhatikan bahwa gambar ini kedaluwarsa. Ini menunjukkan versi 2.4.8, dan, pada September 2018, situs web ini menawarkan versi 3.0.10.0 (terakhir diperbarui 2018-03-23).

Peringatan: tautan situs web www.f2ko.de coinhive.com, yang secara luas diidentifikasi sebagai malware .

BullyWiiPlaza
sumber
2

Saya berhasil melakukannya dengan nircmd dengan cara ini:

  1. unduh nircmd.exe dari tautan
  2. buat file .bat Anda
  3. baris pertama file .bat harus seperti ini: nircmd.exe win hide ititle "cmd.exe"
  4. pilih kedua file dan buat file ekstrak sendiri menggunakan winrar
  5. di tab "umum", centang kotak "buat file ekstrak otomatis"
  6. di tab "maju" pilih tombol "ekstrak otomatis"
  7. ada jendela baru dan pilih tab "mode" lalu pilih opsi: "sembunyikan semuanya"
  8. pilih tab "perbarui" dan pilih opsi "timpa file yang ada"
  9. Pilih tab "umum" dan tentukan folder tujuan untuk diekstraksi jika Anda inginkan dan di dalam kotak "Excecute after extract" tulis path lengkap di mana .bat Anda akan diekstraksi. Mis: jika Anda mendefinisikan folder ekstraksi sebagai: "c: \ windows \" maka path lengkap untuk keluar setelah ekstraksi adalah: "c: \ windows \ file.bat" (dalam kasus .bat Anda bernama: file.bat )
  10. klik terima di semua jendela

Sekarang Anda akan memiliki file .exe yang setelah Anda doble klik dan instal, .bat Anda akan berjalan sangat tersembunyi.

ZEUS
sumber
1
cmdow /run /hid "file.extention" arg1 "arg 2"
malak
sumber
3
Harap sertakan penjelasan singkat tentang perintah. Itu mungkin membantu OP (dan yang lainnya) memahami cara kerjanya, bukan hanya menyalin perintah dan menggunakannya.
BloodPhilia
'cmdow' is not recognized as an internal or external command, operable program or batch file.
Bacco
1

Anda tidak perlu melakukan hal khusus.

Jika Anda menjalankan file batch dari layanan windows, mereka harus disembunyikan secara default kecuali Anda mengaktifkan opsi "Izinkan layanan untuk berinteraksi dengan desktop" pada layanan.

sgmoore
sumber
1

Menambahkan jawaban saya di sini dari pos lain karena merupakan duplikat dan saya tidak melihat solusi ini di sini jadi sekarang ada 17 jawaban berbeda untuk bagaimana Anda dapat menjalankan file batch yang disembunyikan. Saya akan menghapus jawaban saya pada posting itu di beberapa titik dalam waktu dekat.

Buat skrip batch Anda dengan batch logika dan perintah di dalamnya, dan kemudian buat file baru dengan .VBSekstensi, gunakan logika di bawah ini (contoh saya berikan di bawah) dan cukup tancapkan path lengkap ke file Anda .CMDatau .BATdengan perintah PING -t <IPAddress>, dll. ia mengeksekusi batch dengan cara tersembunyi yang tidak menampilkan jendela perintah ketika dieksekusi.

Di mana logika dalam contoh di bawah ini menentukan C:\Folder\BatchFileName.cmdperubahan itu untuk menunjuk ke skrip kumpulan dengan perintah Anda yang Anda jalankan secara manual, dll. Sekarang.

Simpan .VBSfile dan jadwalkan dengan Task Scheduler Masalah menjadwalkan tugas di windows7 untuk berjalan pada jadwal yang tidak terbatas untuk kebutuhan Anda.

Jika tidak, cukup klik dua kali pada .VBSfile untuk menjalankan PINGperintah tak terbatas yang Anda masukkan ke dalam file batch yang Anda arahkan sesuai kebutuhan.

CATATAN: Saya percaya ini adalah tempat saya mendapatkan logika skrip ini dari tetapi ia bekerja dengan andal untuk tujuan yang sama yang Anda butuhkan di sini yaitu untuk memastikan jendela perintah disembunyikan ketika file batch dijalankan Server Fault Source

CONTOH VBS SCRIPT RUN COMMAND LINE BATCH HIDING CMD WINDOW

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
Pimp Juice
sumber
1

Di sini saya telah mengkompilasi semua cara yang saya tahu untuk memulai proses tersembunyi dengan batch tanpa alat eksternal. Dengan skrip yang siap digunakan (beberapa dari mereka cukup kaya pada opsi), dan semuanya membentuk baris perintah. Ada kemungkinan juga PID dikembalikan. Alat yang digunakan adalah IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process dan JScript.Net

npocmaka
sumber
1

Meskipun saya sudah menjawab ini, inilah pendekatan lain. Perbedaannya di sini adalah bahwa skrip batch dapat menyembunyikan dirinya sendiri saat dijalankan. Anda akan memerlukan dua skrip tambahan - windowMode.bat dan getCMDPid.bat (keduanya berisi .netkode). Di sini bagaimana kemudian dapat digunakan:

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit
npocmaka
sumber
0

Saya memiliki masalah yang sama, tetapi menemukan jawabannya:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)

Alan Panayotov
sumber
0

Saya mulai mencoba mencari tahu dan tidak pernah benar-benar berhasil. Ini sedekat yang saya dapat:

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul
Djangofan
sumber
0

Saya perlu menyembunyikan jendela untuk file batch yang dipanggil dari menu konteks explorer, dan juga perlu menambahkan kutipan pada parameter. Tidak ada jawaban yang bekerja untuk saya, jadi saya menambahkan solusi saya sendiri.

Saya punya ini di "perintah" registri untuk menu konteks explorer:

cmd /c C:\mypath\myprogram.bat "%1"

Jadi untuk menggantinya saya harus membuat vbs seperti ini:

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

Simpan di tempat seperti C:\mypath\myscript.vbsdan sebut seperti ini di registri:

wscript "C:\mypath\myscript.vbs" "%1"

Perhatikan bahwa path .bat tidak dapat memiliki spasi, jadi ganti dengan nama file 8.3. Jadi misalnya C:\Program Files\myprogram.batharus dirujuk sebagai C:\Progra~1\myprogram.bat. Untuk melihat penggunaan nama file 8.3dir /x

bortao
sumber
0

Saya menciptakan RunApp untuk melakukan pekerjaan seperti itu dan juga menggunakannya dalam produksi saya, semoga membantu.

Konfigurasi seperti di bawah ini:

file: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

Dan luncurkan runapp.exesaja.

James Yang
sumber
-1

Ini bekerja untuk windows 8 (mungkin orang lain)

  1. Buat file batch seperti biasa
  2. Buat pintasan ke file batch
  3. Klik kanan pada shortcut> properties
  4. Klik Layout
  5. Hapus centang "Biarkan jendela posisi sistem"
  6. atur posisi kiri tp -1000
  7. klik berlaku

  8. Klik pada jalan pintas dan itu akan berjalan tetapi Anda tidak akan melihatnya :)

Andrew
sumber
4
Benarkah? Ini tidak akan ditampilkan sebagai tombol di bilah tugas?
Scott