題 Windows相當於whereis?


有沒有相當於Unix的 哪裡 Windows中的命令?

這樣我就可以弄明白我可以在哪些命令中運行。


151
2017-08-11 10:50


起源




答案:


哪裡 命令執行您想要的操作並至少返回到Windows 98的資源工具包,默認情況下包含在Server 2003,Vista和更新版本中:

C:\>where csc
C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe

如果在沒有參數的情況下執行(在Vista上),它會產生我最喜歡的消息之一:

C:\>where
ERROR: The operation completed successfully.

如果在PowerShell中執行,請確保包含“.exe”以區分路徑中的任何“where”別名或腳本。 ('where'是Where-Object.ps1的典型別名)

C:\> where.exe where.exe
C:\Windows\System32\where.exe

181
2017-09-10 23:00



我每天都學到新的東西...... - Rubens Mariuzzo
有點難過 where 現在只需在Windows 7中返回使用幫助。想親自看看:p - Svish
where 不適用於XP - Tom Roggero
@TomRoggero,我本可以更清楚。它是從Windows 98開始的可選資源工具包的一部分,僅包含在XP之後的版本的基本安裝中。 - Kevin


hackerish which.cmd:

@echo off
@set PATH=.;%PATH%

@rem 
@rem about:  something similar like the unix-alike-which, but with
@rem         within pure cmd
@rem 

if "%1" == "" (
    @echo Usage: 
    @echo.
    @echo   which 'cmd'
    @echo.
    @echo.if 'cmd' is not found, ERRORLEVEL is set to 1
    @echo.  
) else (
    ( @for %%f in (%1 %1.exe %1.cmd %1.bat %1.pif) do if not "%%~$PATH:f" == "" ( @echo %%~$PATH:f ) else @set ERRORLEVEL=1) 
)

6
2017-09-10 21:08



對於舊系統來說,這是一個很好的修復,但是你應該知道它會導致一些怪癖。它匹配目錄,僅返回在每個擴展的路徑中找到的第一個結果,並且應該包括在PATHEXT環境變量中找到的每個擴展。 - Kevin
是的,這是我的一個舊的黑客,當我粘貼在這裡,我立即看到%PATHEXT%的潛力:) - akira


請用 哪裡 命令:

> where app.exe

這是實現目標的最佳方式。

您還可以使用PowerShell命令:

> $env:path.Split(';') | gci -Filter app.exe

和擴展版本看起來像這樣:

 > $env:path.Split(';') | select -Unique | ? {$_ -and (test-path $_)} | gci -Filter app.exe

6
2017-08-04 21:39



這是最好的答案 - skan


某處“在那裡”我找到了這個批處理文件 whereis.bat

@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i

更新:也許我找到了 這裡


2
2017-11-09 05:00





至少有一個 Windows端口 為了 which 效用。


1
2017-08-11 10:53





一種不同的(GUI)方法,但請看一下 一切


0
2017-11-09 06:52



那是不同的。它肯定無法幫助你回答這個問題“當我在當前目錄中執行<command>時,準確執行了什麼可執行文件“這就是OP的要求。 - Dawid Ferenczy


我今天正在尋找這個,因為我在沒有資源工具包的XP上,我使用以下命令轉向PowerShell:

dir -path c:\ -filter ffmpeg.* -r

0
2017-07-14 15:46



我並不精通powershell,但似乎你正在搜索整個目錄樹。這不等同於 where 只在中搜索 %PATH%。此外,它更慢,並為您沒有讀取權限的文件夾提供錯誤 - phuclv
同意......我不需要功能的精確副本,只需要找到程序的能力。 - KalenGi


function find ($string) { 
   Get-ChildItem -Path 'c:\' -Recurse -Filter $string; 
}

function whereis ($string) { 
   $superpath = "$env:Path;C:\Program Files;C:\Program Files (x86)";
   (echo $superpath).Split(';') | Get-ChildItem -Recurse -Filter $string; 
}

例:

PS>找到Mozilla.admx

    Directory: C:\Windows\PolicyDefinitions                                                                                     

Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        1/27/2016  12:22 PM          37146 Mozilla.admx                                                                   

PS> whereis firefox.exe

    Directory: C:\Program Files\Mozilla Firefox                                                                                 

Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        9/21/2017   5:30 PM         477136 firefox.exe        

0
2017-10-05 14:19





您可以嘗試使用以下命令搜索命令:

dir /s type-whatever-you-are-searching

-1
2017-08-11 13:04



這對我不起作用。例如,exp命令在我的路徑中,但是dir / s exp或dir / s exp.exe只提供“找不到文件”。 - bobmcn
如果a)從驅動器的根目錄進行搜索,b)您的路徑全部在一個驅動器上,並且c)您的路徑按字典順序排列,則可以使用此方法。即使在這些條件下,它也會非常緩慢。 - Kevin