ค้นหาเส้นทางของโปรแกรมที่จะดำเนินการจากบรรทัดคำสั่งใน Windows


128

ว่าฉันมีโปรแกรมที่X.EXEติดตั้งในโฟลเดอร์c:\abcd\happy\ในระบบ โฟลเดอร์อยู่ในเส้นทางของระบบ ตอนนี้สมมติว่ามีโปรแกรมอื่นในระบบที่เรียกว่า X.EXE c:\windows\แต่มีการติดตั้งในโฟลเดอร์

เป็นไปได้หรือไม่ที่จะทราบได้อย่างรวดเร็วจากบรรทัดคำสั่งว่าถ้าฉันพิมพ์X.EXEที่X.EXEจะเปิดตัวสองอัน? (แต่ไม่ต้องค้นหาหรือดูรายละเอียดกระบวนการในตัวจัดการงาน)

อาจเป็นคำสั่งในตัวบางอย่างหรือโปรแกรมบางอย่างที่สามารถทำสิ่งนี้ได้? :

detect_program_path X.EXE

คำตอบ:


239

ใช้whereคำสั่ง ผลลัพธ์แรกในรายการคือผลลัพธ์ที่จะดำเนินการ

C: \> ที่ notepad
C: \ Windows \ System32 \ notepad.exe
C: \ Windows \ notepad.exe

ตามที่โพสต์บล็อกนี้ , where.exeมาพร้อมกับ Windows Server 2003 และในภายหลังดังนั้นเพียงแค่นี้ควรจะทำงานกับ Vista, Win 7, et al

บน Linux เทียบเท่าเป็นคำสั่งเช่นwhichwhich ssh


2
+1! ฉันไม่เคยรู้มาก่อนว่านี่อาจเป็นส่วนหนึ่งของ Windows ดังนั้นจึงไม่ได้มองไปในทิศทางนั้น! :)
Zabba

1
สิ่งใดเทียบเท่ากับผู้ใช้ xp ที่ไม่ดี?
shahar_m

@shahar_m: คุณลองใช้สคริปต์ด้านล่างจาก Michael Burr หรือไม่? ไม่ใช่ในตัว แต่อาจทำในสิ่งที่คุณต้องการ
Chris Schmich

1
@ เคนนี่: สมมติว่าคุณรู้ชื่อของ DLL คุณสามารถใช้ยูทิลิตี้ ListDLLs ( technet.microsoft.com/en-us/sysinternals/bb896656 ) จากบรรทัดคำสั่งเพียงเรียกใช้listdlls -d foo.dllเพื่อดูกระบวนการทั้งหมดที่โหลดโมดูลและเส้นทางแบบเต็มไปยังโมดูลที่โหลด หรือคุณสามารถค้นหาไฟล์ Windows เพื่อหาชื่อไฟล์
Chris Schmich

2
@ เคนนี่: สิ่งที่คุณขอแตกต่างจากคำตอบที่โพสต์ที่นี่ คุณควรสร้างคำถาม Stack Overflow ใหม่พร้อมงานวิจัยที่คุณได้ทำไปแล้วและโพสต์ลิงก์ไว้ในความคิดเห็นเหล่านี้
Chris Schmich

10

นี่เป็นสคริปต์ cmd เล็กน้อยที่คุณสามารถคัดลอก -n-paste ลงในไฟล์ที่ตั้งชื่อwhere.cmdดังนี้:

@echo off
rem - search for the given file in the directories specified by the path, and display the first match
rem
rem    The main ideas for this script were taken from Raymond Chen's blog:
rem
rem         http://blogs.msdn.com/b/oldnewthing/archive/2005/01/20/357225.asp
rem
rem
rem - it'll be nice to at some point extend this so it won't stop on the first match. That'll
rem     help diagnose situations with a conflict of some sort.
rem

setlocal

rem - search the current directory as well as those in the path
set PATHLIST=.;%PATH%
set EXTLIST=%PATHEXT%

if not "%EXTLIST%" == "" goto :extlist_ok
set EXTLIST=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
:extlist_ok

rem - first look for the file as given (not adding extensions)
for %%i in (%1) do if NOT "%%~$PATHLIST:i"=="" echo %%~$PATHLIST:i

rem - now look for the file adding extensions from the EXTLIST
for %%e in (%EXTLIST%) do @for %%i in (%1%%e) do if NOT "%%~$PATHLIST:i"=="" echo %%~$PATHLIST:i

8

ตามหัวข้อที่กล่าวถึงในความคิดเห็นget-commandใน PowerShell ยังสามารถทำงานได้ ตัวอย่างเช่นคุณสามารถพิมพ์get-command npmและผลลัพธ์ดังต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่


(get-command npm).Sourceจะตอบกลับโดยมีเพียงพา ธ ไปยัง npm (สำหรับตัวอย่าง) แทนตารางทั้งหมดของคุณสมบัติทั้งหมด
David Brown
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.