Saya mencoba menemukan cara untuk mendapatkan PID saya sendiri dari command prompt (untuk digunakan nanti dalam skrip kelelawar) sejauh ini satu-satunya cara berguna yang saya temukan adalah menggunakan getpids.exe dari sini: http://www.scheibli.com/ proyek / getpids / index.html tetapi saya sedang mencari perintah yang "built in" ke windows
sunting: saya sedang mencari cara "bukti peluru" - tidak ada asumsi tentang proses saya menjadi satu-satunya cmd.exe atau apa pun
microseconds
, daripada 1/100 detik seperti dalam% waktu%), akan lebih dapat diandalkan dalam kasus ini:wmic os get LocalDateTime
(YearMonthDayHourMinuteSecond.Microsecond + Timezone). Kecuali jika penjadwal dapat menjalankan dua hal dalam mikrodetik yang sama persis ...Saya percaya yang berikut ini anti peluru, asalkan pengguna memiliki akses ke WMIC dan TEMP menunjuk ke jalur yang valid di mana pengguna memiliki hak istimewa menulis. Ini adalah hasil akhir dari beberapa karya kolaboratif di http://www.dostips.com/forum/viewtopic.php?f=3&t=6133 .
Script membuat kunci eksklusif pada file sementara yang menggabungkan waktu saat ini ke dalam nama. Hanya akan ada tabrakan jika dua proses batch bernama mencoba untuk mendapatkan PID dalam interval waktu 0,01 detik yang sama, dalam hal ini hanya satu yang akan berhasil.
Setiap proses yang gagal akan berulang kali berulang kembali dan coba lagi dengan jalur file kunci baru sampai berhasil.
Path lengkap ke file kunci diubah menjadi ID unik yang dapat digunakan dalam permintaan WMIC. WMIC dijalankan dalam perintah FOR / F, yang berarti itu berjalan dalam proses cmd.exe anak. Itu sebabnya ParentProcessID dari proses cmd.exe diambil.
sumber
Memperluas jawaban Tony Roth:
Menggunakan filter WINDOWTITLE menghindari pipa sehingga Anda bisa meletakkannya dalam for loop dan menetapkannya ke variabel dengan SET jika Anda suka:
Menghapus
/v
membuatnya lebih cepat, dan/NH
menghilangkan garis tajuk. Anda memerlukan wildcard setelah"uniqueTitle"
karena judul jendela sebenarnya berisi perintah saat ini (sehingga akan terus berlanjut jika Anda mencoba untuk mencocokkannya sepenuhnya).sumber
Menggunakan PowerShell + WMI:
sumber
pwsh -noprofile -c "(Get-Process -Id $PID).Parent.Id"
sumber
jika Anda tahu hanya ada satu cmd.exe yang berjalan, Anda bisa mendapatkan PID dengan cara ini:
sumber
Ini harus melakukan trik:
sumber
Jika Anda ingin menemukan PID dari imagename "notepad.exe", maka kode berikut akan bekerja untuk Anda:
sumber
Jika Anda punya Windows 2003 Resource kit dorong melalui qgrep untuk mendapatkan garis yang Anda inginkan. Anda kemudian dapat mengekstrak pid dari sini (ini mengasumsikan Anda hanya menjalankan satu cmd sekaligus),
sumber
Lihatlah trik batch kecil ini . Ini menetapkan judul cmd ke nilai khusus kemudian menggunakan daftar tugas untuk menemukannya. Inventif
\\ Greg
sumber
CARA PENDEK INI UNTUK MENDAPATKAN ID PROSES UNTUK CMD TERBUKA
sumber
Jawaban ini HANYA akan memberi Anda ID proses, dan tidak ada hal tambahan yang termasuk dalam jawaban teratas.
Penjelasan:
-ada tidak akan menjadi PID untuk cmd.exe yang lebih besar dari 18100 jadi periksa apakah PID2 lebih besar dari 8100 jadi kita tahu apakah itu angka 4 digit atau 5 digit
kasus 1: PID 5 digit seperti 17504 memiliki PID1 val 17504 dan PID2 val 1750, jadi kami menggunakan PID1
kasus 2: PID 4 digit seperti 8205 memiliki nilai PID1 8205 "dan nilai PID2 8205, jadi kami menggunakan PID2
kasus 3: PID 4 digit seperti 4352 memiliki val PID1 4352 "dan val PID2 4352, jadi kami menggunakan PID2
sumber