ฉันจะค้นหาตำแหน่งที่ตั้งของแฟ้มที่ปฏิบัติการได้ใน Windows ได้อย่างไร


154

ฉันจำได้ว่าฉันใช้เครื่องมือที่เรียกว่าwhereเพื่อค้นหาตำแหน่งสำหรับโปรแกรมที่ดำเนินการได้เช่นนี้ในคอนโซล:

 C:\Tmp\Where myTool.exe
 C:\Program Files\MyApp\myTools.exe
 ....

ตอนนี้ฉันไม่พบเครื่องมือนี้ ไม่แน่ใจว่า Windows มีเครื่องมือในตัวเพื่อทำการค้นหาหรือไม่



หากแอปพลิเคชันทำงานและคุณจำเป็นต้องทราบตำแหน่งให้ใช้ Process Explorer (จาก Sys Internals)
Ganesh R.

6
whereทำงานให้ฉันใน Windows 7 Enterprise
Bohemian

4
PAGING OP: โปรดอัปเดตคำตอบที่ได้รับการยอมรับ :)
Jake

1
@ David.Chu.ca โปรดอัปเดตคำตอบที่ได้รับการยอมรับ
Matt Frear

คำตอบ:


351

ตามคำตอบของ StackOverflow ที่มี 'เทียบเท่า' บน windows หรือไม่? , where.exeนี้ไม่เกี่ยวกับ Windows 7 และ Windows Server 2003 และต่อมา:

ตัวอย่าง

C:\> where ping

เอาท์พุท:

C:\Windows\System32\PING.EXE

19
สิ่งนี้ควรทำให้ makred เป็นคำตอบที่ถูกต้องเพราะมันทำงานได้โดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติม
Cookie

25
ส่วนที่สำคัญของคำตอบนี้คือใน PowerShell whereเป็นนามแฝงเริ่มต้นสำหรับWhere-Objectดังนั้นคุณจึงจำเป็นต้องใช้where.exeหรือgcm/Get-Command
เดฟแอนเดอร์เซ็น

2
สิ่งที่เกี่ยวกับ PowerShell ฉันจะประสบความสำเร็จเหมือนกันใน PowerShell ได้อย่างไร
krv

1
@krv ตามที่ @DaveAndersen พูดถึงใน powershell คุณสามารถพิมพ์Get-Command ping(หรือเพียงแค่gcm ping) ซึ่งจะให้เส้นทางเต็มพร้อมกับข้อมูลอื่น ๆ
Sam

22

แก้ไข: ฉันควรจะเพิ่มถ้าคุณไม่สามารถใช้คำสั่ง WHERE จากพรอมต์คำสั่งตรวจสอบตัวแปร PATH ของคุณ (เพียงใช้คำสั่ง "path") ตรวจสอบให้แน่ใจว่า C: \ Windows \ System32 อยู่ในพา ธ ของคุณ นั่นคือที่ที่ "where.exe" ตั้งอยู่

คำสั่งที่คุณกำลังมองหาอยู่ที่ไหน! ที่เป็นเหมือนการข้ามระหว่างเชลล์ UNIX ในตัว "ซึ่ง" และคำสั่ง "ค้นหา" ซึ่งจะใช้งานได้กับทั้งคำสั่งที่รันได้และไฟล์ปกติ

มันค่อนข้างซับซ้อนกว่าทั้งสองอย่างนี้ถึงแม้ว่าโดยทั่วไปแล้วจะง่าย

WHERE <file>

จะทำงาน.

มันแตกต่างจากคำสั่ง "ค้นหา" เนื่องจากไม่ได้มองผ่านระบบไฟล์ทั้งหมด แต่พฤติกรรมเริ่มต้นคือการค้นหาไฟล์ในสองตำแหน่งแทน:

  • ไดเรกทอรีปัจจุบัน
  • ไดเร็กทอรีทั้งหมดในตัวแปร PATH

ดังนั้นคำสั่งใด ๆ ที่คุณสามารถเรียกใช้โดยตรงจากพรอมต์คำสั่งโดยไม่ต้องระบุไดเรกทอรีจะพบได้โดยคำสั่ง WHERE (เพราะคำสั่งใด ๆ เช่นนั้นมีอยู่แล้วในรายการตัวแปร PATH)

หากคุณต้องการค้นหาเฉพาะในตัวแปรพา ธ คำสั่งคุณสามารถใช้:

WHERE "$path:<search text>"

หากในอีกทางหนึ่งคุณต้องการค้นหาสำเนาทั้งหมดของไฟล์ในแผนผังไดเรกทอรีคุณสามารถใช้:

WHERE /R <Top Level Directory> <search text>

ท้ายที่สุด WHERE จะค้นหาคำสั่งและไฟล์ใด ๆ ที่มีส่วนขยายจากตัวแปร PATHEXT โดยไม่รวมส่วนขยาย ไฟล์อื่นทั้งหมดจะต้องมีการระบุอย่างแน่นอนหรือกับตัวแทน

ยกตัวอย่างไฟล์ "dxdiag.exe" และ "dxdiagn.dll" หมายเหตุคำสั่งต่อไปนี้และผลลัพธ์:

WHERE /R C:\Windows dxdiag

C:\Windows\System32\dxdiag.exe
C:\Windows\SysWOW64\dxdiag.exe
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiag.exe
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiag.exe

จะประสบความสำเร็จในการส่งกลับ "dxdiag.exe" ทุกรุ่นเพราะ ".exe" เป็นส่วนขยายหนึ่งในตัวแปร PATHEXT (หมายเหตุ: "WHERE dxdiag" จะทำงานได้เช่นกันเนื่องจาก C: \ Windows \ System32 อยู่ในตัวแปร PATH)

WHERE /R C:\Windows dxdiagn

ในทางกลับกันไม่สามารถส่งคืนผลลัพธ์ใด ๆ ได้เนื่องจาก ".dll" ไม่ได้อยู่ใน PATHEXT

ในกรณีนี้ดูผลลัพธ์ที่เพิ่มไวด์การ์ดให้เรา:

WHERE /R C:\Windows dxdiagn*

C:\Windows\System32\dxdiagn.dll
C:\Windows\System32\en-US\dxdiagn.dll.mui
C:\Windows\SysWOW64\dxdiagn.dll
C:\Windows\SysWOW64\en-US\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_daccd04369b09c70\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiagn.dll
C:\Windows\WinSxS\x86_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_7eae34bfb1532b3a\dxdiagn.dll.mui
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiagn.dll

มันจะส่งคืนdxdiagn.dll ทุกรุ่นสำเร็จ

สำหรับข้อมูลเพิ่มเติมให้ใช้ "WHERE /?" หวังว่านี่จะช่วยได้!


2
where where C:\Windows\System32\where.exe:)
vp_arth

1
@vp_arth แค่คิดอย่างเดียวกัน :)
วิศวกรที่กลับรายการ

10

ใช้dir:

cd \
dir /s /b mytool.exe

cd \ส่วนการเปลี่ยนแปลงที่คุณไปยังรากของไดรฟ์เพื่อให้แน่ใจว่าจะเริ่มต้นการค้นหาที่ด้านบนของลำดับชั้น


ดูเหมือนว่าการค้นหาบรรทัดคำสั่งของ Windows
Ganesh R.

5
นั่นเป็นการค้นหาไดรฟ์แบบเรียกซ้ำและจะใช้ตลอดไป
djhowell

6
วิธีเดียวในการค้นหาไฟล์ที่รันได้ในAREN'Tในตัวแปรสภาพแวดล้อม PATH คือการทำเช่นนี้ เขาไม่เคยระบุเส้นทางของเขาเขากล่าวว่าปฏิบัติการใด
John T

มันจะพบว่าปฏิบัติการ แต่ใช้เวลาสักครู่
Michael Z

หลักสูตรนี้ใช้งานได้เฉพาะในกรณีที่คุณรู้ชื่อของปฏิบัติการหรืออย่างน้อยส่วนหนึ่งของชื่อ
Oliver Williams

9

โปรดทราบว่าบางสิ่งอาจแตกต่างกันเล็กน้อยสำหรับ PowerShell:

PS C:\Users\Rob.wb-devel> where ping

PS C:\Users\Rob.wb-devel> where git

PS C:\Users\Rob.wb-devel> whereis.bat git
C:\Program Files (x86)\Git\cmd\git.exe

PS C:\Users\Rob.wb-devel> where.exe git
C:\Program Files (x86)\Git\cmd\git.exe

ขอขอบคุณมันใช้ได้กับทั้งคำสั่งและ PowerShell
Ding-Yi Chen

3

น่าผิดหวังว่ามันไม่ได้มีมาให้ในตัวเป็นคำสั่งง่ายๆ

อย่างไรก็ตามมีหลายโซลูชั่นซึ่งหนึ่งในนั้นเป็นไฟล์ชุด

สร้างแบตช์ไฟล์ (ซึ่ง. bat) ดังต่อไปนี้:

@setlocal
@set P2=.;%PATH%
@for %%e in (%PATHEXT%) do @for %%i in (%~n1%%e) do @if NOT "%%~$P2:i"=="" echo %%~$P2:i 

สิ่งนี้จะปรากฏในไดเรกทอรีท้องถิ่นจะใช้พารามิเตอร์ชื่อไฟล์โดยมีหรือไม่มีส่วนขยายและส่งคืนการจับคู่ครั้งแรกจากไดเรกทอรีปัจจุบันหรือในเส้นทาง

จากนั้นเรียกมันชอบwhich cmd.exeที่จะหา cmd.exe cmdที่จะดำเนินการถ้าคุณพิมพ์ใน


3

ใน windows คุณสามารถใช้ยูทิลิตีฟรีเครื่องมือค้นหาทุกอย่างเพื่อค้นหาไฟล์ใด ๆได้ทันทีโดยใช้ชื่อเต็มหรือบางส่วน (หากฮาร์ดดิสก์ของคุณถูกฟอร์แมตเป็น ntfs)


1
ความแตกต่างระหว่างกลางวันและกลางคืนระหว่างสิ่งนี้กับการค้นหาหน้าต่าง
AnthonyVO


1

ใน PowerShell

(@($env:path.split(";")) + (pwd).Path)  | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }

คุณสามารถแปลงเป็น Cmdlet ได้อย่างง่ายดาย

อีกวิธีหนึ่งในการทำให้สิ่งนี้สำเร็จตามที่แนะนำในการแก้ไข:

get-command notepad.exe | select Source

0

หากคุณต้องการพา ธ เพื่อเปิดมันมักจะดีกว่าที่จะใช้คำสั่ง start ตัวอย่างเช่นคุณสามารถใช้ "start chrome.exe" เพื่อเริ่ม Chrom {e | ium} ไม่ว่าจะติดตั้งที่ไหน


0

เฮ้ฉันต้องโพสต์ไฟล์ซับไฟล์ชุดเดียวของ Windows นี้:

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

การทดสอบ:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\\ssh.EXE

ไม่ใช่ซับในถ้าคุณใส่โค้ดในsetlocal enableextensionsและendlocalซึ่งจำเป็นสำหรับผู้ใช้ที่ไม่มีการเปิดใช้งานส่วนขยายตามค่าเริ่มต้น

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