Есть ли эквивалент «который» в командной строке Windows?

Поскольку у меня иногда возникают проблемы с путями, когда один из моих собственных сценариев cmd скрыт (затенен) другой программой (ранее в пути), я хотел бы иметь возможность найти полный путь к программе в командной строке Windows, учитывая просто его имя.

Есть ли эквивалент UNIX-команды 'which'?

В UNIX which commandпечатает полный путь заданной команды, чтобы легко найти и устранить эти проблемы с теневым копированием.

20.11.2008 04:19:35
Foredecker: «which» ищет в PATH исполняемый файл, который будет запущен, если вы введете команду в командной строке.
Greg Hewgill 20.11.2008 04:28:27
Например, если у вас установлено 5 версий Java, и вы не знаете, какая из них используется, вы можете ввести «какой java», и это даст вам PATH для двоичного кода
ninesided 20.11.2008 04:41:38
@Foredecker, MR говорит, что это "где" в Win2k3, но Win2k3 не было частью вопроса. Если «где» нет в других версиях Windows, другие ответы также действительны. IMNSHO, ответ, который работает на всех версиях Windows, является лучшим. Кроме того, другие ответы не являются неправильными, просто разные способы сделать это.
paxdiablo 22.11.2008 12:55:03
Я знаю, что этот вопрос возник до появления SuperUser, но, вероятно, он там и есть.
palswim 12.10.2010 17:04:35
В whichстандартном Unix нет команды. Утилита POSIX есть type. В командной оболочке C есть команда which, а в некоторых системах она является внешним исполняемым файлом. Например, в Debian Linux whichпоставляется из пакета с именем debutils. Это внешнее whichне «видит» встроенные функции оболочки, псевдонимы или функции. typeделает; У Bash typeесть возможность подавить это и просто выполнить поиск пути.
Kaz 17.04.2015 16:09:03
24 ОТВЕТА
РЕШЕНИЕ

Windows Server 2003 и более поздние версии (т. Е. Все, что после 32-разрядной версии Windows XP) предоставляют where.exeпрограмму, которая выполняет некоторые функции which, хотя и соответствует всем типам файлов, а не только исполняемым командам. (Он не соответствует встроенным командам оболочки, таким как cd.) Он даже принимает символы подстановки, поэтому where nt*находит все файлы в вашем %PATH%и текущем каталоге, имена которых начинаются с nt.

Попробуйте where /?за помощь.

Обратите внимание , что Windows PowerShell определяет в whereкачестве псевдонима в Where-Objectкомандлет , так что если вы хотите where.exe, вы должны ввести полное имя вместо опуская .exeрасширения.

2526
8.02.2016 07:39:35
Нет, потому что grep проверяет содержимое своих входных данных, которые вы должны явно указать. which и where.exe смотрят только имена файлов в наборе каталогов, заданных в переменных среды PATH.
Michael Ratanapintha 10.12.2011 23:46:50
@ Ajedi32 - Правильно, чего нет в XP. Как я уже сказал, «Windows Server 2003 и более поздние версии».
Michael Ratanapintha 25.09.2012 05:40:45
Работает в Windows 8
rob 15.04.2013 15:07:16
обратите внимание, что это не будет работать в powershell, если вы не введете where.exe
JonnyRaa 28.01.2014 14:46:59
Помните , что where.exeэто не оболочку встроенный, вам нужно иметь %windir%\system32на своем контекстуальном %PATH%- что может быть не так, как использование whereпредполагает , что вы можете работать над проблемами с вашим путем!
Tomasz Gandor 8.07.2015 09:00:25

Нет в наличии Windows, но она предоставляется Services for Unix, и есть несколько простых пакетных скриптов, которые выполняют то же самое, что и этот .

8
20.11.2008 04:28:14
За исключением того, что команда, на которую вы ссылаетесь, выводит только переменную PATH и даже не проверяет, найден ли там файл.
Angel O'Sphere 16.07.2013 13:20:55

Лучшая версия, которую я нашел в Windows - это утилита Джозефа Ньюкомера "whereis", которая доступна (с источником) с его сайта .

Статья о разработке "whereis" стоит прочитать.

7
20.11.2008 05:09:19
Поздний комментарий: где есть проблемы с поиском 64-битных исполняемых файлов под Win 7 64-bit.
Axel Kemper 16.01.2016 19:50:45

Если у вас установлен PowerShell (что я рекомендую), вы можете использовать следующую команду в качестве грубого эквивалента (замените имя программы для имени вашего исполняемого файла):

($Env:Path).Split(";") | Get-ChildItem -filter programName*

Больше здесь: Мой Манвич! PowerShell который

39
13.12.2018 21:03:57
Я искал эту точную содержательную команду powershell. Я использовал where.exe, но необходимость возиться с кодом ошибки поверх синтаксического анализа его вывода намного уступает нативному решению powershell. Спасибо!
scobi 27.10.2012 02:17:53
Но ($Env:Path).Split(";") | Get-ChildItem -filter programName*это так легко набрать ... ;-)
Craig 30.11.2014 08:56:05
Это также дает сбой, если в вашем пути есть переменная, которая обычно разрешается системой (aka% JAVA_HOME%).
dragon788 13.04.2017 15:18:24

Хотя в более поздних версиях Windows есть whereкоманда, вы также можете сделать это с Windows XP с помощью модификаторов переменных среды, как показано ниже:

c:\> for %i in (cmd.exe) do @echo.   %~$PATH:i
   C:\WINDOWS\system32\cmd.exe

c:\> for %i in (python.exe) do @echo.   %~$PATH:i
   C:\Python25\python.exe

Вам не нужны никакие дополнительные инструменты, и это не ограничивается тем, что PATHвы можете заменить любую переменную среды (в формате пути, конечно), которую вы хотите использовать.


И, если вам нужно то, которое может обрабатывать все расширения в PATHEXT (как это делает сама Windows), то это поможет:

@echo off
setlocal enableextensions enabledelayedexpansion

:: Needs an argument.

if "x%1"=="x" (
    echo Usage: which ^<progName^>
    goto :end
)

:: First try the unadorned filenmame.

set fullspec=
call :find_it %1

:: Then try all adorned filenames in order.

set mypathext=!pathext!
:loop1
    :: Stop if found or out of extensions.

    if "x!mypathext!"=="x" goto :loop1end

    :: Get the next extension and try it.

    for /f "delims=;" %%j in ("!mypathext!") do set myext=%%j
    call :find_it %1!myext!

:: Remove the extension (not overly efficient but it works).

:loop2
    if not "x!myext!"=="x" (
        set myext=!myext:~1!
        set mypathext=!mypathext:~1!
        goto :loop2
    )
    if not "x!mypathext!"=="x" set mypathext=!mypathext:~1!

    goto :loop1
:loop1end

:end
endlocal
goto :eof

:: Function to find and print a file in the path.

:find_it
    for %%i in (%1) do set fullspec=%%~$PATH:i
    if not "x!fullspec!"=="x" @echo.   !fullspec!
    goto :eof

На самом деле он возвращает все возможности, но вы можете легко настроить его для конкретных правил поиска.

286
23.06.2012 03:49:37
Эй, я бы хотел узнать это! Жаль, что он не работает с MS-DOS или Win9x (то есть с command.com). (У Раймонда Чена есть более «тщательно продуманная» версия, которую вы можете превратить в пакетный файл: blogs.msdn.com/oldnewthing/archive/2005/01/20/357225.aspx )
Michael Ratanapintha 1.01.2009 03:27:10
@ Майкл, если вы все еще используете DOS или Win95, поиск исполняемых файлов по пути - это наименьшая из ваших проблем :-)
paxdiablo 9.04.2009 05:41:33
Windows распознает как исполняемый файл больше, чем .exe. В прошлый раз, когда я whichзадал код в днях W95 / DOS, порядок поиска был следующим: текущий каталог, затем каждый путь dir, для cmd.com, затем cmd.exe, затем cmd.bat. Таким образом, даже cmd.bat в текущем каталоге выполнил befroe cmd.exe soemwhere в пути
Mawg says reinstate Monica 26.03.2010 00:46:25
@mawg, оригинал был для того, где вы знаете расширение, так как оно отражает то, что в UNIX (там, где этот трюк с добавлением расширений не происходит). Теперь я добавил тот, который может делать то, что вы хотите, но это уже не простая команда, а сценарий. Сначала он пробует неукрашенную команду, а затем каждую из дополнительных. Надеюсь, это поможет. Вы можете настроить его по своему усмотрению (если вы хотите использовать тот же порядок поиска, что и в Windows, например - этот показывает все возможности).
paxdiablo 26.03.2010 01:34:03
Чтобы превратить это в пакетный скрипт, создайте файл с именем «which.bat»: @echo off for %%i in (%1) do @echo. %%~$PATH:%i чтобы добавить его в скрипт alias.bat, который вы загружаете при каждом запуске cmd.exe (поместите вышеуказанный скрипт в новый каталог с именем C: \ usr \ aliases): DOSKEY which=C:\usr\aliases\which.bat $* Затем вы можете создать скрипт для запуска cmd.exe с файлом alias.bat: cmd.exe /K E:\usr\aliases\alias.bat
Brad T. 25.04.2014 20:42:14

У инструментов GnuWin32 есть whichцелый ряд других инструментов Unix.

37
20.11.2008 06:44:18

Я создал инструмент, похожий на Нед Батчелдер:

Поиск файлов .dll и .exe в PATH

Хотя мой инструмент предназначен главным образом для поиска различных версий DLL, он показывает больше информации (дата, размер, версия), но он не использует PATHEXT (я надеюсь обновить мой инструмент в ближайшее время).

5
20.11.2008 09:39:21

Получите unxutils отсюда: http://sourceforge.net/projects/unxutils/

золото на платформах Windows, ставит все приятные утилиты Unix на стандартную Windows DOS. Использую его годами.

В него включено «которое». Обратите внимание, что он чувствителен к регистру, хотя.

NB: чтобы установить его, взорвите zip-файл и добавьте ... \ UnxUtils \ usr \ local \ wbin \ в переменную env вашего системного пути.

10
11.01.2012 15:00:31
это не чувствительно к регистру, также я должен сказать, какой java.exe вместо какого java - windows 7
Kalpesh Soni 22.05.2013 19:46:56
У него есть пара разочарований, хотя они связаны с переводом строки; Например, grep не будет соответствовать EOL, если вы не введете .для \ r. Это 99% решение, хотя точно!
dash-tom-bang 28.07.2015 20:01:17
Да, он не чувствителен к регистру, однако по умолчанию имена файлов в Windows также не чувствительны к регистру.
Wernfried Domscheit 10.02.2020 10:50:39

Если вы можете найти бесплатный компилятор Pascal, вы можете скомпилировать это. По крайней мере, это работает и показывает необходимый алгоритм.

program Whence (input, output);
  Uses Dos, my_funk;
  Const program_version = '1.00';
        program_date    = '17 March 1994';
  VAR   path_str          : string;
        command_name      : NameStr;
        command_extension : ExtStr;
        command_directory : DirStr;
        search_dir        : DirStr;
        result            : DirStr;


  procedure Check_for (file_name : string);
    { Check existence of the passed parameter. If exists, then state so   }
    { and exit.                                                           }
  begin
    if Fsearch(file_name, '') <> '' then
    begin
      WriteLn('DOS command = ', Fexpand(file_name));
      Halt(0);    { structured ? whaddayamean structured ? }
    end;
  end;

  function Get_next_dir : DirStr;
    { Returns the next directory from the path variable, truncating the   }
    { variable every time. Implicit input (but not passed as parameter)   }
    { is, therefore, path_str                                             }
    var  semic_pos : Byte;

  begin
      semic_pos := Pos(';', path_str);
      if (semic_pos = 0) then
      begin
        Get_next_dir := '';
        Exit;
      end;

      result := Copy(Path_str, 1, (semic_pos - 1));  { return result   }
      { Hmm! although *I* never reference a Root drive (my directory tree) }
      { is 1/2 way structured), some network logon software which I run    }
      { does (it adds Z:\ to the path). This means that I have to allow    }
      { path entries with & without a terminating backslash. I'll delete   }
      { anysuch here since I always add one in the main program below.     }
      if (Copy(result, (Length(result)), 1) = '\') then
         Delete(result, Length(result), 1);

      path_str := Copy(path_str,(semic_pos + 1),
                       (length(path_str) - semic_pos));
      Get_next_dir := result;
  end;  { Of function get_next_dir }

begin
  { The following is a kludge which makes the function Get_next_dir easier  }
  { to implement. By appending a semi-colon to the end of the path         }
  { Get_next_dir doesn't need to handle the special case of the last entry }
  { which normally doesn't have a semic afterwards. It may be a kludge,    }
  { but it's a documented kludge (you might even call it a refinement).    }
  path_str := GetEnv('Path') + ';';

  if (paramCount = 0) then
  begin
    WriteLn('Whence: V', program_version, ' from ', program_date);
    Writeln;
    WriteLn('Usage: WHENCE command[.extension]');
    WriteLn;
    WriteLn('Whence is a ''find file''type utility witha difference');
    Writeln('There are are already more than enough of those :-)');
    Write  ('Use Whence when you''re not sure where a command which you ');
    WriteLn('want to invoke');
    WriteLn('actually resides.');
    Write  ('If you intend to invoke the command with an extension e.g ');
    Writeln('"my_cmd.exe param"');
    Write  ('then invoke Whence with the same extension e.g ');
    WriteLn('"Whence my_cmd.exe"');
    Write  ('otherwise a simple "Whence my_cmd" will suffice; Whence will ');
    Write  ('then search the current directory and each directory in the ');
    Write  ('for My_cmd.com, then My_cmd.exe and lastly for my_cmd.bat, ');
    Write  ('just as DOS does');
    Halt(0);
  end;

  Fsplit(paramStr(1), command_directory, command_name, command_extension);
  if (command_directory <> '') then
  begin
WriteLn('directory detected *', command_directory, '*');
    Halt(0);
  end;

  if (command_extension <> '') then
  begin
    path_str := Fsearch(paramstr(1), '');    { Current directory }
    if   (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
    else
    begin
      path_str := Fsearch(paramstr(1), GetEnv('path'));
      if (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
                          else Writeln('command not found in path.');
    end;
  end
  else
  begin
    { O.K, the way it works, DOS looks for a command firstly in the current  }
    { directory, then in each directory in the Path. If no extension is      }
    { given and several commands of the same name exist, then .COM has       }
    { priority over .EXE, has priority over .BAT                             }

    Check_for(paramstr(1) + '.com');     { won't return if file is found }
    Check_for(paramstr(1) + '.exe');
    Check_for(paramstr(1) + '.bat');

    { Not in current directory, search through path ... }

    search_dir := Get_next_dir;

    while (search_dir <> '') do
    begin
       Check_for(search_dir + '\' + paramstr(1) + '.com');
       Check_for(search_dir + '\' + paramstr(1) + '.exe');
       Check_for(search_dir + '\' + paramstr(1) + '.bat');
       search_dir := Get_next_dir;
    end;

    WriteLn('DOS command not found: ', paramstr(1));
  end;
end.
8
13.12.2018 21:42:49
Вау, есть люди, все еще использующие Паскаль? :-)
paxdiablo 26.03.2010 01:30:23
Я представляю, что есть. Но не я. Вы видели строку program_date = '17 March 1994 ';
Mawg says reinstate Monica 26.03.2010 12:12:47
Блок my_funk;не нужен. Спасибо за размещение программы на Паскале, напоминает мне о моей молодости! Жаль, что Паскаль не эволюционировал.
yannis 27.08.2015 08:41:42
О, но это так. Например, теперь объектно-ориентированный. На lazarus-ide.org есть отличная бесплатная, кроссплатформенная реализация и IDE. Прямой потомок Borland по-прежнему живет в Delphi по адресу embarcadero.com/products/delphi, который стоит очень дорого (imo) за 299 долларов за стартовую версию. и $ 1 тыс. за «полезное» издание. Впрочем, это кроссплатформенность - windows, iOs, Mac, Android. Получите пробную версию или используйте Lazarus и почувствуйте себя на 20 лет моложе, -)
Mawg says reinstate Monica 27.08.2015 13:36:51
@yannis "Жаль, что Паскаль не эволюционировал" ... кроме Андерса из "Турбо Паскаля", продолжающего разрабатывать C #, ты имеешь в виду?
piers7 18.11.2015 08:01:17

Cygwin - это решение. Если вы не возражаете против использования стороннего решения, Cygwin - это то, что вам нужно.

Cygwin предоставляет вам удобство * nix в среде Windows (и вы можете использовать его в командной оболочке Windows или использовать оболочку * nix по вашему выбору). Он дает вам целый набор * nix команд (например which) для Windows, и вы можете просто включить этот каталог в свой PATH.

17
13.12.2018 21:44:51
GnuWin32, упомянутый ранее Ферруччо, намного лучше в этом случае, так как вы можете использовать native там, где только исполняемый файл.
Piotr Dobrogost 29.08.2011 09:15:08
GnuWin32 великолепен, и я им пользуюсь, но если вам нужна эта функциональность без установки инструментов GnuWin32, где.exe кажется правильным вызовом. Хотя я помещаю инструменты GnuWin32 в общую папку \ bin $ в нашей сети, чтобы я мог использовать их с рабочих станций (и в пакетных файлах), для которых они не установлены локально.
Craig 30.11.2014 08:57:53
Когда мы говорим об использовании Cygwin в Windows, я предпочитаю: cygpath -w "` which <appname> `"
mpasko256 8.09.2015 11:27:09

В Windows PowerShell:

set-alias which where.exe
59
13.12.2018 21:45:12

Под PowerShell Get-Commandнайдет исполняемые файлы в любом месте $Env:PATH.

Get-Command eventvwr

CommandType   Name          Definition
-----------   ----          ----------
Application   eventvwr.exe  c:\windows\system32\eventvwr.exe
Application   eventvwr.msc  c:\windows\system32\eventvwr.msc

Он также находит командлеты PowerShell, функции, псевдонимы, файлы с настраиваемыми расширениями исполняемых файлов через $Env:PATHEXTи т. Д., Определенные для текущей оболочки (довольно похоже на Bash type -a foo), что делает его более подходящим, чем другие инструменты, такие как where.exe, which.exeи т. Д., Которые не знают об этих Команды PowerShell.

Поиск исполняемых файлов, используя только часть имени

gcm *disk*

CommandType     Name                             Version    Source
-----------     ----                             -------    ------
Alias           Disable-PhysicalDiskIndication   2.0.0.0    Storage
Alias           Enable-PhysicalDiskIndication    2.0.0.0    Storage
Function        Add-PhysicalDisk                 2.0.0.0    Storage
Function        Add-VirtualDiskToMaskingSet      2.0.0.0    Storage
Function        Clear-Disk                       2.0.0.0    Storage
Cmdlet          Get-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          New-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          Remove-PmemDisk                  1.0.0.0    PersistentMemory
Application     diskmgmt.msc                     0.0.0.0    C:\WINDOWS\system32\diskmgmt.msc
Application     diskpart.exe                     10.0.17... C:\WINDOWS\system32\diskpart.exe
Application     diskperf.exe                     10.0.17... C:\WINDOWS\system32\diskperf.exe
Application     diskraid.exe                     10.0.17... C:\WINDOWS\system32\diskraid.exe
...

Поиск пользовательских исполняемых файлов

Чтобы найти другие исполняемые файлы, отличные от Windows (python, ruby, perl и т. Д.), Необходимо добавить расширения файлов для этих исполняемых файлов в PATHEXTпеременную среды (по умолчанию .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL), чтобы идентифицировать файлы с этими расширениями в PATHкачестве исполняемых файлов. Так Get-Commandже, как и эта переменная, она может быть расширена для получения списка пользовательских исполняемых файлов. например

$Env:PATHEXT="$Env:PATHEXT;.dll;.ps1;.psm1;.py"     # temporary assignment, only for this shell's process

gcm user32,kernel32,*WASM*,*http*py

CommandType     Name                        Version    Source
-----------     ----                        -------    ------
ExternalScript  Invoke-WASMProfiler.ps1                C:\WINDOWS\System32\WindowsPowerShell\v1.0\Invoke-WASMProfiler.ps1
Application     http-server.py              0.0.0.0    C:\Users\ME\AppData\Local\Microsoft\WindowsApps\http-server.py
Application     kernel32.dll                10.0.17... C:\WINDOWS\system32\kernel32.dll
Application     user32.dll                  10.0.17... C:\WINDOWS\system32\user32.dll

Вы можете быстро настроить псевдоним с помощью sal which gcm(краткая форма set-alias which get-command).

Дополнительную информацию и примеры можно найти в онлайн-справке для Get-Command.

150
6.01.2019 22:23:06
Он находит гораздо больше, чем просто исполняемые файлы. Это также ловит командные файлы
Maximilian Burszley 30.11.2018 21:43:13
@ TheIncorrigible1 - если вы имеете в виду командные файлы, такие как командные файлы ( .BATи .CMDт. Д.), Они считаются исполняемыми, потому что их расширения названы в PATHEXTпеременной (по умолчанию это так PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL). Другие исполняемые типы (например .py, .rbи т. Д.) Могут быть добавлены путем добавления расширения файла и создания ассоциации исполняемых файлов с assoc/ ftype- например, docs.python.org/3.3/using/…
shalomb 6.01.2019 21:19:28

Ни один из Win32-портов Unix, которые я мог найти в Интернете, не является удовлетворительным, потому что у них всех есть один или несколько из этих недостатков:

  • Нет поддержки переменной Windows PATHEXT. (Который определяет список расширений, неявно добавляемых к каждой команде перед сканированием пути, и в каком порядке.) (Я использую много сценариев tcl, и ни один из общедоступных средств не может их найти.)
  • Отсутствует поддержка кодовых страниц cmd.exe, из-за чего они неправильно отображают пути с символами, отличными от ascii. (Я очень чувствителен к этому, с ç в моем имени :-))
  • Отсутствует поддержка отдельных правил поиска в cmd.exe и командной строке PowerShell. (Ни один из общедоступных инструментов не найдет сценарии .ps1 в окне PowerShell, но не в окне cmd!)

Так что в конце концов я написал свой собственный, который правильно поддерживает все вышеперечисленное.

Доступно здесь: http://jf.larvoire.free.fr/progs/which.exe

6
18.12.2014 13:29:59
К вашему сведению, я с открытым исходным кодом мой упомянутый выше инструмент which.exe и многие другие, на github.com/JFLarvoire/SysToolsLib . Вы можете получить последнюю версию там, сообщить о проблемах и т. Д.
Jean-François Larvoire 11.05.2016 13:44:50

У меня есть функция в моем профиле PowerShell под названием «который»

function which {
    get-command $args[0]| format-list
}

Вот как выглядит результат:

PS C:\Users\fez> which python


Name            : python.exe
CommandType     : Application
Definition      : C:\Python27\python.exe
Extension       : .exe
Path            : C:\Python27\python.exe
FileVersionInfo : File:             C:\Python27\python.exe
                  InternalName:
                  OriginalFilename:
                  FileVersion:
                  FileDescription:
                  Product:
                  ProductVersion:
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:
11
31.07.2015 08:59:57
Ни одно из других решений не работало для меня, но > get-command app.exe | format-listработало отлично!
Alexander McFarlane 16.07.2018 09:30:56

Для вас, пользователей Windows XP (у которых нет whereвстроенной команды), я написал команду "где, как", в виде rubygem whichr.

Чтобы установить его, установите Ruby.

потом

gem install whichr

Запустите это как:

C:> whor cmd_here

4
13.12.2018 21:52:14
Я подозреваю, что вас опровергают, потому что вы предлагаете что-то делать в Windows XP.
sebastian-c 11.06.2018 15:35:26
Не понизил, но установка Ruby для реализации тривиальной команды также является жесткой продажей. Выше есть цикл for, который можно поместить в пакетный скрипт.
Gringo Suave 31.10.2019 17:48:06
Распечатывает ли начальные строки тему песни для Ведьмака, если вы запускаете ее в подробном режиме? ;)
Agi Hammerthief 25.11.2019 12:51:08

В PowerShell это gcmдаёт отформатированную информацию о других командах. Если вы хотите получить только путь к исполняемому файлу, используйте .Source.

Например: gcm gitили(gcm git).Source

Tidbits:

  • Доступно для Windows XP.
  • Доступно с PowerShell 1.0.
  • gcmявляется псевдонимом Get-Commandкомандлета .
  • Без каких-либо параметров он перечисляет все доступные команды, предлагаемые оболочкой хоста.
  • Вы можете создать собственный псевдоним с Set-Alias which gcmи использовать его как: (which git).Source.
  • Официальные документы: https://technet.microsoft.com/en-us/library/ee176842.aspx
12
11.09.2015 11:32:27

В Windows CMD whichзвонки where:

$ where php
C:\Program Files\PHP\php.exe
25
1.04.2016 12:02:00

Этот пакетный файл использует обработку переменных CMD, чтобы найти команду, которая будет выполнена в пути. Примечание: текущий каталог всегда выполняется перед путем), и в зависимости от того, какой вызов API используется, другие местоположения ищутся до / после пути.

@echo off
echo. 
echo PathFind - Finds the first file in in a path
echo ======== = ===== === ===== ==== == == = ====
echo. 
echo Searching for %1 in %path%
echo. 
set a=%~$PATH:1
If "%a%"=="" (Echo %1 not found) else (echo %1 found at %a%)

Смотрите set /?за помощью.

6
25.09.2016 01:45:38

TCC и TCC / LE от JPSoft - замены CMD.EXE, которые добавляют значительную функциональность. Относящийся к вопросу OP whichявляется встроенной командой для процессоров команд семейства TCC.

3
9.02.2017 23:31:11

Сначала вы можете установить Git из Downloading Git , а затем открыть Git Bash и набрать:

which app-name
7
13.12.2018 21:53:42

Я использую GOW (GNU на Windows), который является облегченной версией Cygwin. Вы можете взять его с GitHub здесь .

GOW (GNU в Windows) - это легкая альтернатива Cygwin. Он использует удобный установщик Windows, который устанавливает около 130 чрезвычайно полезных приложений UNIX с открытым исходным кодом, скомпилированных в виде собственных двоичных файлов win32. Он рассчитан на максимально малый размер, около 10 МБ, в отличие от Cygwin, который может работать более 100 МБ в зависимости от параметров. - Описание (Брент Р. Мацель)

Снимок экрана со списком команд, включенных в GOW:

Введите описание изображения здесь

6
13.12.2018 21:55:37

Я использовал whichмодуль из npm довольно давно , и он работает очень хорошо: https://www.npmjs.com/package/which. Это отличная многоплатформенная альтернатива.

Теперь я переключился на то, whichчто идет с Git. Просто добавьте к вашему пути /usr/binпуть от Git, который обычно находится в C:\Program Files\Git\usr\bin\which.exe. whichДвоичная будет C:\Program Files\Git\usr\bin\which.exe. Это быстрее, а также работает как ожидалось.

2
1.06.2018 02:02:25

попробуй это

set a=%~$dir:1
If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)
1
3.05.2019 13:00:18

Просто нужно опубликовать этот пакетный файл для 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.

5
8.10.2019 11:37:56
Предпочел бы это в несколько строк, чтобы я мог понять это. ;-)
Gringo Suave 31.10.2019 17:49:47