как мне найти расположение исполняемого файла в windows?

<p>я вспомнил, что использовал инструмент, называемый <code>where</code>, чтобы найти места для любых исполняемых программ, подобных этой, в консоли:</p><pre><code> c:\tmp\where mytool.exe c:\program files\myapp\mytools.exe .... </code></pre><p>сейчас я не могу найти этот инструмент. не уверены, есть ли в windows встроенный инструмент для этого поиска?</p>

<p>я думаю, что вы, возможно, думаете о команде<strong> which </strong>в linux.</p><pre><code>$ which bash /bin/bash я не знаю эквивалентного инструмента в windows.<strong> редактировать: </strong>я только что вспомнил, что есть пакет <a href="http://unxutils.sourceforge.net/">unix utils для windows, который предоставит вам эту функциональность.

согласно ответу stackoverflow на <a href="https://stackoverflow.com/questions/304319/is-there-an-equivalent-of-which-on-windows">есть ли эквивалент «который» в windows? , where.exe делает это в windows 7 и windows server 2003 и более поздних версиях:примерc:> where ping результат:c:windowssystem32ping.exe 

 редактировать: я должен был добавить, если вы не можете использовать команду where из командной строки, проверьте переменную path. (просто используйте команду «путь».) убедитесь, что c:windowssystem32 находится в вашем пути. вот где находится "where.exe".где команда, которую вы ищете! where - это нечто среднее между встроенной в unix shell командой «which» и командой «locate», поскольку она работает как с исполняемыми файлами команд, так и с обычными файлами.это также несколько сложнее, чем любой из этих двух, хотя, в общем, простойwhere  буду работать.она отличается от команды «locate» тем, что не просматривает всю файловую систему. вместо этого поведение по умолчанию - искать файлы в двух местах: текущий каталог. все каталоги в переменной path. таким образом, любая команда, которую вы можете запустить непосредственно из командной строки без указания каталога, будет найдена командой where. (потому что любая подобная команда уже есть в списке переменных path.)если вы хотите искать<strong> только </strong>в переменной пути к команде, вы можете использовать:where "$path:<search text>" </code></pre><p>если, с другой стороны, вы хотите найти все копии файла в дереве каталогов, вы можете использовать:</p><pre><code>where /r <top level directory> <search text> </code></pre><p>наконец, where найдет команды и любые файлы с расширением из переменной pathext, не включая расширение. все остальные файлы должны быть указаны точно или с подстановочными знаками.</p><p>возьмем, к примеру, файлы "dxdiag.exe" и "dxdiagn.dll". обратите внимание на следующую команду и ее вывод:</p><pre><code>where /r c:\windows dxdiag c:\windows\system32\dxdiag.exe c:\windows\syswow64\dxdiag.exe c:\windows\winsxs\amd64\_microsoft-windows-d..x-directxdiagnostic\_31bf3856ad364e35\_6.2.9200.16384\_none\_7c8d3f96e7882ec7\dxdiag.exe c:\windows\winsxs\x86\_microsoft-windows-d..x-directxdiagnostic\_31bf3856ad364e35\_6.2.9200.16384\_none\_206ea4132f2abd91\dxdiag.exe </code></pre><p>он успешно возвращает все версии «dxdiag.exe», поскольку «.exe» является одним из расширений переменной pathext. (примечание: «where dxdiag» также сработал бы, потому что c:\windows\system32 находится в переменной path.)</p><pre><code>where /r c:\windows dxdiagn </code></pre><p>с другой стороны, не возвращает никакого результата, потому что ".dll" в pathext -<em> не </em>.</p><p>в этом случае посмотрите на результат, который дает нам подстановочный знак:</p><pre><code>where /r c:\windows dxdiagn* c:\windows\system32\dxdiagn.dll c:\windows\system32\en-us\dxdiagn.dll.mui c:\windows\syswow64\dxdiagn.dll c:\windows\syswow64\en-us\dxdiagn.dll.mui c:\windows\winsxs\amd64\_microsoft-windows-d..iagnostic.resources\_31bf3856ad364e35\_6.2.9200.16384\_en-us\_daccd04369b09c70\dxdiagn.dll.mui c:\windows\winsxs\amd64\_microsoft-windows-d..x-directxdiagnostic\_31bf3856ad364e35\_6.2.9200.16384\_none\_7c8d3f96e7882ec7\dxdiagn.dll c:\windows\winsxs\x86\_microsoft-windows-d..iagnostic.resources\_31bf3856ad364e35\_6.2.9200.16384\_en-us\_7eae34bfb1532b3a\dxdiagn.dll.mui c:\windows\winsxs\x86\_microsoft-windows-d..x-directxdiagnostic\_31bf3856ad364e35\_6.2.9200.16384\_none\_206ea4132f2abd91\dxdiagn.dll </code></pre><p>он успешно возвращает<strong><em> все </em></strong>версии dxdiagn.dll.</p><p>для получения дополнительной информации используйте «где /?». надеюсь это поможет!</p>

<p>используйте <code>dir</code>:</p><pre><code>cd \ dir /s /b mytool.exe </code></pre><p>часть <code>cd \</code> переводит вас в корневой каталог диска, чтобы поиск начинался на вершине иерархии.</p>

<p>обратите внимание, что некоторые вещи могут немного отличаться для powershell:</p><pre><code>ps c:\users\rob.wb-devel> where ping ps c:\users\rob.wb-devel> where git ps c:\users\rob.wb-devel> whereis.bat git c:\program files (x86)\git\cmd\git.exe ps c:\users\rob.wb-devel> where.exe git c:\program files (x86)\git\cmd\git.exe </code></pre>

<p>расстраивает, что это не встроенная простая команда.</p><p>однако существует несколько решений, одним из которых является<strong> пакетный файл </strong>.</p><p>создайте командный файл (which.bat) следующим образом:</p><pre><code>@setlocal @set p2=.;%path% @for %%e in (%pathext%) do @for %%i in (%~n1%%e) do @if not "%%~$p2:i"=="" echo %%~$p2:i </code></pre><p>он просматривает локальный каталог, принимает параметр имени файла с расширением или без расширения и возвращает первое совпадение из текущего каталога или из переменной path.</p><p>затем запустите его как<strong><code>which cmd.exe</code></strong>, чтобы найти cmd.exe, который будет выполняться, если вы введете <code>cmd</code>.</p>

<p>в windows вы можете использовать бесплатную утилиту <a href="http://www.voidtools.com/">все, что нужно для поиска</a> искать<em> мгновенно </em>для любого файла с полным или частичным именем (если ваш жесткий диск отформатирован в ntfs).</p>

<p>в powershell</p><pre><code>(@($env:path.split(";")) + (pwd).path) | where { dir $\_ -erroraction silentlycontinue |? name -eq foo.exe } </code></pre><p>вы можете легко преобразовать это в командлет.</p><p>другой способ сделать это, как предложено в редактировании:</p><pre><code>get-command notepad.exe | select source </code></pre>

<p>если вы просто хотите <a href="http://gnuwin32.sourceforge.net/packages/which.htm">который</a> , проект <a href="http://gnuwin32.sourceforge.net/">gnuwin32</a> имеет несколько утилит unix с отдельными установщиками.</p>

<p>если вам просто нужен путь для его запуска, часто лучше использовать команду запуска. например, вы можете использовать «start chrome.exe» для запуска chrom {e | ium}, независимо от того, где он установлен.</p>