Windows эквивалент где?
Есть ли в Windows эквивалент команды Unix whereis?
Чтобы я мог выяснить, где на самом деле находятся команды, которые я могу запустить.
12 ответов
Команда where делает то, что вам нужно, и возвращается, по крайней мере, к комплекту ресурсов для 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
Вы можете запустить следующую команду PowerShell:
gcm <command>
Командлет Get-Command получает все команды, установленные на компьютере, включая командлеты, псевдонимы, функции, фильтры, сценарии и приложения. Get-Command получает команды из модулей PowerShell и команды, импортированные из других сеансов. Чтобы получить только те команды, которые были импортированы в текущий сеанс, используйте параметр ListImported.
Пожалуйста, используйте команду where:
> where app.exe
Это лучший способ достичь своей цели.
Вы также можете использовать команду PowerShell:
> $env:path.Split(';') | gci -Filter app.exe
и расширенная версия выглядит так:
> $env:path.Split(';') | select -Unique | ? {$_ -and (test-path $_)} | gci -Filter app.exe
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)
)
Где-то "там" я нашел этот командный файл whereis.bat
:
@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i
Обновление: возможно я нашел это здесь.
Используя команду where в Windows 10 в cmd, я использовал следующую команду для рекурсивного поиска на диске c копий компилятора C#:
csc.exe
.
c:\> where /r c:\ csc.exe
Существует по крайней мере порт Windows для which
полезность.
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
Я искал это сегодня и, так как я нахожусь на XP без набора ресурсов, я обратился к powershell с помощью следующей команды:
dir -path c:\ -filter ffmpeg.* -r
который.cmd
@echo off
if "%~1" equ "" (
echo usage: %~n0 [command] & exit /b 0
) else where $Path:%1 2>nul || (
echo | set /p x=%~n0: no '%1' in & path
)
doskey.exe
doskey which=where $1 2$Gnul
Использование:
> which.cmd git
C:\Program Files\Git\cmd\git.exe
> which.cmd foo
which: no 'foo' in PATH=C:\Windows\system32;C:\Windows;C:\Win
dows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0
\;C:\Windows\System32\OpenSSH\;C:\Program Files\PowerShell\7\;
Вы можете попробовать найти команду, используя следующее:
dir /s type-whatever-you-are-searching