Windows еквівалент чого?


164

Чи є еквівалент команди Unix whereis в Windows?

Щоб я міг зрозуміти, куди насправді можна запустити команди.

Відповіді:


203

Команда де виконує те, що ви хочете, і повертається, принаймні, до набору ресурсів для 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-Object.ps1)

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

4
Щодня я дізнаюся щось нове ...
Рубенс Маріуццо,

4
Сумно whereпросто повертає довідку щодо використання зараз у Windows 7. Хотів переконатись у цьому: p
Свиш

2
whereнедоступний у XP
Том Роггеро

1
@TomRoggero, я міг би бути більш чітким. Це частина додаткового набору ресурсів, що починається з Windows 98 і входить до базової установки для версії після XP.
Кевін

7

хакерський котрий.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) 
)

1
Це гарне виправлення для старих систем, але ви повинні знати, що це призводить до кількох химерностей. Він відповідає каталогам, тільки повертає перший результат, знайдений у шляху для кожного розширення, і повинен включати кожне розширення, знайдене в змінній середовища PATHEXT.
Кевін

Так, це трохи старший хак мій, коли я вставив його тут, миттєво побачив потенціал для% PATHEXT% :)
akira

7

Будь ласка, використовуйте де команду:

> where app.exe

Це найкращий спосіб досягти своєї мети.

Ви також можете використовувати команду PowerShell:

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

і розширена версія виглядає приблизно так:

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

3

Десь "там" я знайшов цей пакетний файл whereis.bat:

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

Оновлення: можливо, я знайшов його тут .



1
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> де firefox.exe

    Directory: C:\Program Files\Mozilla Firefox                                                                                 

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

0

Я шукав це сьогодні, і оскільки я перебуваю на XP без ресурсного набору, я звернувся до powerhell із наступною командою:

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

Я не досвідчений у владі, але, здається, ви шукаєте все дерево каталогів. Це не рівнозначно тому, whereщо здійснюються лише пошуки в %PATH%. Більше того, це набагато повільніше і видає помилки для папок, у яких ви не маєте дозволу на читання
phuclv

Погоджено ... Мені не потрібна була точна копія функціоналу, лише можливість знайти програму.
KalenGi

-1

Ви можете спробувати пошукати команду за допомогою наступного:

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

Це не працює для мене. Наприклад, команда exp в моєму шляху, але dir / s exp або dir / s exp.exe просто дає "Файл не знайдено".
bobmcn

4
Це може спрацювати, якщо: а) ви шукаєте з кореня диска; б) ваш шлях знаходиться на одному диску, в) ваш шлях у лексикографічному порядку. Навіть у цих умовах це буде смішно повільно.
Кевін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.