Bagaimana saya bisa memeriksa apakah aplikasi berjalan dari file batch (well cmd)?
Saya tidak perlu meluncurkan instance lain jika suatu program sudah berjalan. (Saya tidak bisa mengubah aplikasi untuk menjadikannya satu contoh saja.)
Juga aplikasi bisa berjalan seperti pengguna mana pun.
windows
command-line
batch-file
Matt Lacey
sumber
sumber
Jawaban:
Kemungkinan lain yang saya temukan, terinspirasi oleh penggunaan grep , adalah:
Tidak perlu menyimpan file tambahan, jadi saya lebih suka metode ini.
sumber
tasklist /FI "IMAGENAME eq winword.exe" 2>NUL | find /I /N "winword.exe">NUL
/if %ERRORLEVEL%==1 goto wordnotrunning
untuk membuatnya berfungsi (mencurigai kutipan di sekitar bagian jika/?
layar bantuan . Jadi misalnyaIMAGENAME
dalam versi polish adalahNAZWA_OBRAZU
.tasklist /FI "IMAGENAME eq myapp.exe" /NH | find /I /N "myapp.exe" >NUL
NUL pertama tampaknya tidak perlu, saya tidak tahu untuk apa '2' itu, / NH adalah opsional.Inilah cara saya mengatasinya:
Di atas akan membuka Notepad jika belum berjalan.
Sunting: Perhatikan bahwa ini tidak akan menemukan aplikasi yang disembunyikan dari daftar tugas. Ini akan mencakup tugas terjadwal yang berjalan sebagai pengguna yang berbeda, karena ini disembunyikan secara otomatis.
sumber
Saya suka solusi Chaosmaster! Tapi saya mencari solusi yang tidak memulai program eksternal lain (seperti find.exe atau findstr.exe ). Jadi saya menambahkan ide dari solusi Matt Lacey, yang membuat file temp juga dapat dihindari. Pada akhirnya saya bisa menemukan solusi yang cukup sederhana, jadi saya membagikannya ...
Ini bekerja untuk saya dengan baik ...
sumber
Saran npocmaka untuk menggunakan QPROCESS sebagai ganti TASKLIST bagus tetapi, jawabannya sangat besar dan kompleks sehingga saya merasa berkewajiban untuk memposting versi yang disederhanakan yang, saya kira, akan menyelesaikan masalah sebagian besar pengguna yang tidak mahir:
Kode di atas diuji pada Windows 7, dengan pengguna dengan administrator yang kuat.
sumber
Di Windows Anda dapat menggunakan Windows Management Instrumentasi (WMI) untuk memastikan bahwa tidak ada aplikasi dengan baris perintah yang ditentukan diluncurkan, misalnya:
wmic process where (name="nmake.exe") get commandline | findstr /i /c:"/f load.mak" /c:"/f build.mak" > NUL && (echo THE BUILD HAS BEEN STARTED ALREADY! > %ALREADY_STARTED% & exit /b 1)
sumber
Only the administrator group members can use WMIC.EXE.
diikuti olehReason:Win32 Error: Access is denied.
sumber
/i
.Saya menggunakan PV.exe dari http://www.teamcti.com/pview/prcview.htm diinstal dalam Program Files \ PV dengan file batch seperti ini:
sumber
Jawaban TrueY tampaknya merupakan solusi yang paling elegan, namun, saya harus melakukan sesuatu karena saya tidak mengerti apa yang sebenarnya terjadi. Ijinkan saya menghapus beberapa hal untuk semoga menghemat waktu untuk orang berikutnya.
Jawaban TrueY yang dimodifikasi:
Bagaimanapun, saya harap itu membantu. Saya tahu kadang-kadang membaca batch / command-line bisa agak membingungkan kadang-kadang jika Anda seorang pemula, seperti saya.
sumber
The jawaban yang diberikan oleh Matt Lacey bekerja untuk Windows XP. Namun, pada Windows Server 2003 baris
kembali
yang kemudian dibaca saat proses sedang berjalan.
Saya tidak memiliki tumpukan pengalaman skrip batch, jadi soulution saya adalah untuk kemudian mencari nama proses dalam
search.log
file dan memompa hasilnya ke file lain dan mencari itu untuk output apa pun.Saya harap ini membantu orang lain.
sumber
Saya suka alat
WMIC
danTASKLIST
tetapi mereka tidak tersedia di rumah / edisi dasarQPROCESS
windows. Cara lain adalah dengan menggunakan perintah yang tersedia di hampir setiap mesin windows (untuk orang-orang yang memiliki layanan terminal - saya pikir hanya memenangkan XP tanpa SP2, jadi praktis setiap mesin windows):QPROCESS
perintah tidak begitu kuat karenaTASKLIST
dan terbatas dalam menampilkan hanya 12 simbol nama proses tetapi harus dipertimbangkan jikaTASKLIST
tidak tersedia.Penggunaan yang lebih sederhana di mana ia menggunakan nama jika proses sebagai argumen (
.exe
akhiran adalah wajib dalam kasus ini di mana Anda memberikan nama yang dapat dieksekusi):Perbedaan antara dua cara
QPROCESS
penggunaan adalah bahwaQPROCESS *
daftar keinginan semua proses sementaraQPROCESS some.exe
hanya akan memfilter proses untuk pengguna saat ini.Menggunakan
WMI
objek melalui exe skrip host windows alih-alihWMIC
juga merupakan pilihan. Ini harus dijalankan juga pada setiap mesin windows (tidak termasuk yang mana WSH dimatikan tetapi ini adalah kasus yang jarang terjadi). Berikut file bat yang berisi daftar semua proses melalui WMI kelas dan dapat digunakan sebagai penggantiQPROCESS
skrip di atas (ini adalah jscript / bat hybrid dan harus disimpan sebagai.bat
):Dan modifikasi yang akan memeriksa apakah suatu proses sedang berjalan:
Dua opsi dapat digunakan pada mesin yang tidak memiliki
TASKLIST
.Teknik utamanya adalah menggunakan
MSHTA
. Ini akan berjalan di setiap mesin windows dari XP dan di atasnya dan tidak tergantung pada pengaturan host skrip windows. panggilanMSHTA
dapat sedikit mengurangi kinerja (sekali lagi harus disimpan sebagai kelelawar):sumber
Saya tidak tahu bagaimana melakukannya dengan CMD bawaan tetapi jika Anda punya grep Anda dapat mencoba yang berikut ini:
sumber
Hanya menyebutkan, jika nama tugas Anda sangat panjang maka tidak akan muncul secara keseluruhan dalam
tasklist
hasilnya, jadi mungkin lebih aman (selain lokalisasi) untuk memeriksa yang sebaliknya.Variasi jawaban ini :
sumber
Saya mengasumsikan windows di sini. Jadi, Anda harus menggunakan WMI untuk mendapatkan informasi itu. Lihat arsip The Scripting Guy untuk banyak contoh tentang cara menggunakan WMI dari sebuah skrip.
sumber
Saya menggunakan skrip yang disediakan oleh Matt (2008-10-02). Satu-satunya hal yang saya punya masalah adalah tidak akan menghapus
search.log
file. Saya berharap karena saya harus kecd
lokasi lain untuk memulai program saya. Sayacd
akan kembali ke tempat file BAT dansearch.log
berada, tetapi masih tidak akan menghapus. Jadi saya menyelesaikannya dengan menghapussearch.log
file lebih dulu daripada yang terakhir.sumber
Anda harus memeriksa nama proses induk, lihat artikel Proyek Kode tentang solusi berbasis NET ** .
Cara non-terprogram untuk memeriksa:
c:\windows\notepad.exe
)Hal yang sama dapat diperiksa dengan mendapatkan nama proses induk.
sumber
Membangun jawaban vtrz dan jawaban Samuel Renkert pada topik lain , saya datang dengan skrip berikut yang hanya berjalan
%EXEC_CMD%
jika belum berjalan:Seperti yang dikatakan sebelumnya, ini memerlukan hak administratif.
sumber
Node - (computer name) ERROR: Description = Invalid query
Saya membutuhkan solusi dengan coba lagi. Kode ini akan berjalan sampai proses ditemukan dan kemudian membunuhnya. Anda dapat mengatur batas waktu atau apa pun jika Anda mau.
Catatan:
taskkill.bat
:Jalankan dengan
.\taskkill.bat ProgramToKill.exe
sumber
Saya biasanya menjalankan perintah berikut dalam cmd prompt untuk memeriksa apakah program.exe saya berjalan atau tidak:
sumber