Tìm đường dẫn của chương trình sẽ thực thi từ dòng lệnh trong Windows


128

Nói rằng tôi có một chương trình X.EXEđược cài đặt trong thư mục c:\abcd\happy\trên hệ thống. Thư mục nằm trên đường dẫn hệ thống. Bây giờ giả sử có một chương trình khác trên hệ thống cũng được gọi là X.EXE nhưng được cài đặt trong thư mục c:\windows\.

Có thể nhanh chóng tìm ra từ dòng lệnh rằng nếu tôi nhập vào X.EXEcái nào trong hai X.EXEcái đó sẽ được khởi chạy không? (nhưng không phải tìm kiếm trực tiếp hoặc xem chi tiết quy trình trong Trình quản lý tác vụ).

Có thể một số loại lệnh được xây dựng, hoặc một số chương trình ngoài đó có thể làm một cái gì đó như thế này? :

detect_program_path X.EXE

Câu trả lời:


239

Sử dụng wherelệnh. Kết quả đầu tiên trong danh sách là kết quả sẽ thực thi.

C: \> nơi ghi chú
C: \ Windows \ System32 \ notepad.exe
C: \ Windows \ notepad.exe

Theo bài đăng trên blog này , where.exeđược bao gồm trong Windows Server 2003 trở lên, vì vậy điều này chỉ nên hoạt động với Vista, Win 7, et al.

Trên Linux, tương đương là whichlệnh, vd which ssh.


2
+1! Tôi chưa bao giờ biết đây có thể là một phần của Windows và vì vậy đã không nhìn theo hướng đó! :)
Zabba

1
Bất kỳ tương đương cho người dùng xp nghèo?
shahar_m

@shahar_m: bạn đã thử kịch bản dưới đây từ Michael Burr chưa? Nó không được tích hợp sẵn, nhưng nó có thể làm những gì bạn cần.
Chris Schmich

1
@Kenny: Giả sử bạn biết tên của DLL, bạn có thể sử dụng tiện ích ListDLLs ( technet.microsoft.com/en-us/sysi INTERNals / bb896656 ). Từ dòng lệnh, chỉ cần chạy listdlls -d foo.dllđể xem tất cả các quy trình có mô-đun được tải và đường dẫn đầy đủ đến mô-đun được tải. Ngoài ra, bạn chỉ có thể thực hiện tìm kiếm tệp Windows cho tên tệp.
Chris Schmich

2
@Kenny: Những gì bạn đang yêu cầu rất khác với câu trả lời được đăng ở đây. Bạn nên tạo một câu hỏi Stack Overflow mới với những nghiên cứu bạn đã thực hiện và đăng một liên kết đến nó trong những bình luận này.
Chris Schmich

10

Đây là một đoạn mã cmd nhỏ mà bạn có thể sao chép-n-paste vào một tệp có tên như 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

Như chủ đề được đề cập trong bình luận, get-commandtrong powershell cũng có thể giải quyết nó. Ví dụ: bạn có thể nhập get-command npmvà đầu ra như sau:

nhập mô tả hình ảnh ở đây


(get-command npm).Sourcesẽ trả lời chỉ với đường dẫn đến npm (ví dụ) thay vì toàn bộ bảng của tất cả các thuộc tính.
David Brown
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.