Вопрос: Windows эквивалент whereis?


Есть ли эквивалент Unix где команда в Windows?

Чтобы я мог понять, на каких командах я могу работать, на самом деле.


145
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-Object.ps1)

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

173
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
yah, это немного более старый взломанный мой, когда я вставил его здесь, я мгновенно увидел потенциал для% 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> в текущем каталоге«и это то, о чем спрашивает ОП. - 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