වින්ඩෝස් විධාන රේඛාවේ 'කුමන' ට සමානද?


2359

මට සමහර විට මාර්ග ගැටලු ඇති බැවින්, මගේම cmd ස්ක්‍රිප්ට් එකක් වෙනත් වැඩසටහනකින් සඟවා (සෙවනැලි කර ඇති) වෙනත් වැඩසටහනකින් (කලින් මාර්ගයේ), වින්ඩෝස් විධාන රේඛාවේ ඇති වැඩසටහනකට සම්පූර්ණ මාර්ගය සොයා ගැනීමට මම කැමතියි. එහි නම පමණි.

'කුමන' යුනික්ස් විධානයට සමානද?

යුනික්ස් හි, which commandමෙම සෙවනැලි ගැටළු පහසුවෙන් සොයා ගැනීමට සහ අලුත්වැඩියා කිරීමට දී ඇති විධානයේ සම්පූර්ණ මාර්ගය මුද්‍රණය කරයි.


3
Foredecker: ඔබ විසින් ෂෙල් විමසුමේදී විධානයක් ටයිප් කළහොත් ක්‍රියාත්මක වන ක්‍රියාත්මක කළ හැකි දේ සඳහා PATH සෙවීම.
ග්‍රෙග් හෙව්ගිල්

3
උදාහරණයක් ලෙස, ඔබ ජාවා සංස්කරණ 5 ක් ස්ථාපනය කර ඇත්නම් සහ කුමන එකක් භාවිතා කරන්නේ දැයි ඔබ නොදන්නේ නම් ඔබට "කුමන ජාවා" ටයිප් කළ හැකි අතර එය ඔබට ද්විමය
නයින්සයිඩ්

9
OredForedecker, MR පවසන්නේ එය Win2k3 හි “කොහේද” නමුත් Win2k3 ප්‍රශ්නයේ කොටසක් නොවන බවයි. අනෙක් වින්ඩෝස් අනුවාදවල "කොහේද" නොමැති නම්, වෙනත් පිළිතුරු ද වලංගු වේ. IMNSHO, සියලු වින්ඩෝස් අනුවාද වල ක්‍රියාත්මක වන පිළිතුර හොඳම වේ. එසේම, අනෙක් පිළිතුරු වැරදි නොවේ, එය සිදු කරන විවිධ ක්‍රම.
පැක්ස්ඩියාබ්ලෝ

36
මෙම ප්‍රශ්නය සුපර් යූසර්ට පෙර ඇති වූ බව මම දනිමි, නමුත් එය බොහෝ විට එහි අයිති විය හැකිය.
palswim

18
whichසම්මත යුනික්ස් හි විධානයක් නොමැත . POSIX උපයෝගීතාව වේ type. සී ෂෙල් එකට කුමන විධානයක් ඇති අතර සමහර පද්ධති එය බාහිර ක්‍රියාත්මක කළ හැකි ය. උදාහරණයක් ලෙස, ඩේබියන් ලිනක්ස් හි, whichපැකේජයක් වෙතින් පැමිණේ debutils. මෙම බාහිරින් whichෂෙල් බිල්ට්, අන්වර්ථ හෝ කාර්යයන් "නොපෙනේ". typeකරයි; බෑෂ් ගේ typeහා හුදෙක් මාර්ගය බැලීමට කරන මැඩීමට සඳහා විකල්පයක් ඇත.
Kaz

Answers:


2561

වින්ඩෝස් සර්වර් 2003 සහ ඊට පසු (එනම් වින්ඩෝස් එක්ස්පී 32 බිට් පසු ඕනෑම දෙයක්) මඟින් where.exeවැඩසටහන මඟින් whichසපයනුයේ එය ක්‍රියාත්මක කළ හැකි විධානයන්ට පමණක් නොව සියලු වර්ගවල ලිපිගොනු වලට ගැලපෙන නමුත් එය කරන දේය . (එය බිල්ට් ෂෙල් විධාන වැනි නොගැලපේcd .) එය ආදේශක කාඩ්පත් පවා පිළිගනු ඇත, එබැවින් where nt*ඔබගේ %PATH%සහ වර්තමාන නාමාවලියෙහි ඇති සියලුම ලිපිගොනු සොයා ගනී nt.

where /?උදව් සඳහා උත්සාහ කරන්න.

වින්ඩෝස් පවර්ෂෙල් cmdletwhere සඳහා අන්වර්ථයක් ලෙස අර්ථ දක්වන බව Where-Objectසලකන්න , එබැවින් ඔබට අවශ්‍ය නම් where.exe, .exeදිගුව මඟ හැරීම වෙනුවට සම්පූර්ණ නම ටයිප් කළ යුතුය .


30
නැත, මන්ද grep එහි ආදානයේ අන්තර්ගතය විමසා බලන බැවින් ඔබට පැහැදිලිවම ලබා දිය යුතුය. which and where.exe PATH පරිසර විචල්‍යයන්හි සකසා ඇති නාමාවලි සමූහයක ඇති ගොනු වල නම් පමණක් බලන්න .
මයිකල් රතනපින්තා

12
නිවැරදි, - Ajedi32 @ වන එක්ස්පී තුළ නැත. මම කී පරිදි, "වින්ඩෝස් සර්වර් 2003 සහ පසුව".
මයිකල් රතනපින්තා

24
වින්ඩෝස් 8 හි වැඩ කරයි
මංකොල්ලකන්න

59
මෙය බව නැරඹීමට powershell දී ශතකයට හතරේ වැඩ ඔබ where.exe ටයිප් නම්
JonnyRaa

18
where.exeඑය ෂෙල් බිල්ඩින් එකක් නොවන බව මතක තබා ගන්න , ඔබ සතුව තිබිය %windir%\system32යුතුය %PATH%- එය එසේ නොවිය හැකිය, භාවිතා කිරීමෙන් whereඇඟවෙන්නේ ඔබ ඔබේ මාවතේ ඇති ගැටලු සම්බන්ධයෙන් කටයුතු කරමින් සිටින බවයි!
ටොමාස් ගන්ඩෝර්

288

වින්ඩෝස් හි පසු සංස්කරණ වලට whereවිධානයක් ඇති අතර , ඔබට පහත සඳහන් පරිදි පරිසර විචල්‍ය විකරණකාරක භාවිතා කරමින් වින්ඩෝස් එක්ස්පී සමඟ මෙය කළ හැකිය:

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 හි ඇති සියලුම දිගු හැසිරවිය හැකි එකක් අවශ්‍ය නම් (වින්ඩෝස් මෙන්), මෙය උපක්‍රමය කරයි:

@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

එය සැබවින්ම සියලු හැකියාවන් ආපසු ලබා දෙන නමුත් නිශ්චිත සෙවුම් නීති සඳහා ඔබට එය පහසුවෙන් වෙනස් කළ හැකිය.


7
හේයි, මම ඒක ඉගෙන ගත්තා නම් හොඳයි! ඉතා නරක නම් එය MS-DOS හෝ Win9x සමඟ ක්‍රියා නොකරයි (එනම් command.com සමඟ). (රේමන්ඩ් චෙන් ඔබට වඩාත් "විස්තීර්ණ" අනුවාදයක් ඇත, ඔබට කණ්ඩායම් ගොනුවක් බවට පත් කළ හැකිය: blogs.msdn.com/oldnewthing/archive/2005/01/20/357225.aspx )
මයිකල් රතනපින්තා

110
Ic මයිකල්, ඔබ තවමත් ඩොස් හෝ වින් 95 භාවිතා කරන්නේ නම්, ක්‍රියාත්මක කළ හැකි මාර්ග සොයා ගැනීම ඔබේ ගැටලුවලින් අවම වේ :-)
paxdiablo

කවුළු .exe ට වඩා වැඩියෙන් ක්‍රියාත්මක කළ හැකි බව හඳුනා ගනී. අවසන් වරට මම whichW95 / DOS දිනවල පසුපසට කේත කළ විට, සෙවුම් අනුපිළිවෙල වූයේ - වත්මන් ඩිර්, පසුව සෑම මාර්ගයක්ම, cmd.com සඳහා, පසුව cmd.exe, පසුව cmd.bat එබැවින්, වර්තමාන dir හි cmd.bat පවා වේ ක්‍රියාත්මක කරන ලද befroe cmd.exe soemwhere
මාව් පවසන්නේ මොනිකා

3
w මව්ග්, මුල් පිටපත යුනික්ස් යටතේ දර්පණය වන බැවින් ඔබ දිගුව දන්නා ස්ථානය සඳහා විය (එම දිග එකතු කිරීමේ උපක්‍රමය සිදු නොවන තැන). මම දැන් ඔබට අවශ්‍ය දේ කළ හැකි එකක් එකතු කර ඇති නමුත් එය තවදුරටත් ස්ක්‍රිප්ටයක් තරම් සරල විධානයක් නොවේ. එය මුලින්ම උත්සාහ කරන්නේ අලංකාර නොකළ විධානය සහ පසුව එක් එක් දිගුවයි. උපකාරවත් වන බලාපොරොත්තුව. ඔබට සුදුසු යැයි පෙනෙන පරිදි ඔබට එය ඔබගේ අවශ්‍යතාවන්ට වෙනස් කළ හැකිය (උදාහරණයක් ලෙස වින්ඩෝස් සමඟ ඇති සෙවුම් අනුපිළිවෙල ඔබට අවශ්‍ය නම් - මෙය සියලු හැකියාවන් පෙන්වයි).
paxdiablo

2
මෙය කණ්ඩායම් පිටපතක් බවට පත් කිරීම සඳහා, "which.bat" නමින් ගොනුවක් සාදන්න: @echo off for %%i in (%1) do @echo. %%~$PATH:%i ඔබ cmd.exe ධාවනය කරන සෑම අවස්ථාවකම ඔබ පටවන අන්වර්ථ.බැට් ස්ක්‍රිප්ටයකට එය එක් කිරීමට (ඉහත පිටපත C: \ usr නමින් නව නාමාවලියක තබන්න. DOSKEY which=C:\usr\aliases\which.bat $* i අන්වර්ථ නාම): එවිට ඔබට අන්වර්ථය.බැට් ගොනුව සමඟ cmd.exe දියත් කිරීම සඳහා පිටපතක් සෑදිය හැකිය: cmd.exe /K E:\usr\aliases\alias.bat
බ්‍රැඩ් ටී.

156

පවර්ෂෙල් යටතේ, 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 cmdlets, කාර්යයන්, යළි-යොමුවීම්, අභිරුචි ක්රියාත්මක කළ දිගු ගොනු හරහා සම්බ $Env:PATHEXT, ආදිය වත්මන් shell (තරමක් බෑෂ් ගේ සමාන අර්ථ type -a fooවැනි අනෙකුත් මෙවලම් වඩා එය වඩාත් හොඳ යැමට අවශ්ය බවට -) where.exe, which.exeමේ කිසිවක් නොදැන සිටින ආදිය, පවර්ෂෙල් විධාන.

නමේ කොටසක් පමණක් භාවිතා කරමින් ක්‍රියාත්මක කළ හැකි දේ සොයා ගැනීම

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
...

අභිරුචි ක්‍රියාත්මක කළ හැකි දේ සොයා ගැනීම

වෙනත් වින්ඩෝස් නොවන ක්‍රියාත්මක කළ හැකි දේ සොයා ගැනීමට (පයිතන්, රූබි, පර්ල්, ආදිය), ක්‍රියාත්මක කළ හැකි ලෙස මෙම දිගු සමඟ ලිපිගොනු හඳුනා ගැනීම සඳහා එම ක්‍රියාත්මක කළ හැකි අය සඳහා ගොනු දිගු කිරීම PATHEXTපාරිසරික විචල්‍යයට (පෙරනිමියෙන් .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL) එකතු කළ යුතුය PATH. Get-Commandමෙම විචල්‍යයට ගරු කරන ආකාරයටම , අභිරුචි ක්‍රියාත්මක කළ හැකි ලැයිස්තුගත කිරීම සඳහා එය දීර් can කළ හැකිය. උදා

$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.


2
එය ක්‍රියාත්මක කළ හැකි දේට වඩා බොහෝ දේ සොයා ගනී. එය විධාන ලිපිගොනු ද අල්ලා ගනී
මැක්සිමිලියන් බර්ස්ලි

2
I TheIncorrigible1 - ඔබ අදහස් කරන්නේ කණ්ඩායම් ගොනු ( ,, යනාදිය) වැනි විධාන ලිපිගොනු නම් , ඒවා ක්‍රියාත්මක කළ හැකි යැයි සලකනු ලබන්නේ ඒවායේ දිගුව විචල්‍යයෙන් නම් කර ඇති නිසාය (පෙරනිමියෙන් ). ගොනු ක්‍රියාත්මක කිරීමේ දිග එකතු කිරීමෙන් සහ / - සමඟ ක්‍රියාත්මක කළ හැකි සම්බන්ධතාවයක් ඇති කිරීමෙන් වෙනත් ක්‍රියාත්මක කළ හැකි වර්ග (උදා , ආදිය) එකතු කළ හැකිය. Docs.python.org/3.3/using/….BAT.CMDPATHEXTPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL.py.rbassocftype
shalomb

මුල් පිළිතුර 2008 දී නැවත පළ කළ බැවින් මෙය 2020 වන හොඳම පිළිතුර ලෙස අවංකව තෝරා ගත යුතුය. කාලය වෙනස් වී ඇත. පවර්ෂෙල් යනු මාර්ගයයි, විශේෂයෙන් මෙම පිළිතුර දැන් පවර්ෂෙල් පවතින ඕනෑම තැනකට හරස් වේදිකාවක් වී ඇත.
ScriptAutomate

60

වින්ඩෝස් පවර්ෂෙල් හි:

set-alias which where.exe

40

ඔබ පවර්ෂෙල් ස්ථාපනය කර ඇත්නම් (මම නිර්දේශ කරන), ඔබට පහත විධානය දළ වශයෙන් සමාන ලෙස භාවිතා කළ හැකිය (ඔබේ ක්‍රියාත්මක කළ හැකි නම සඳහා ආදේශක ක්‍රමලේඛ නාමය):

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

තවත් මෙහි ඇත: මගේ මැන්විච්! පවර්ෂෙල් කුමන


1
මම මේ හරියටම බලවත් විධානය සොයමින් සිටියෙමි. මම where.exe භාවිතා කර ඇති නමුත් එහි ප්‍රතිදානය විග්‍රහ කිරීමේදී ඉහළින් ඇති දෝෂ කේතය අවුල් කිරීම ස්වදේශීය බල විසඳුම් විසඳුමකට වඩා බෙහෙවින් අඩු ය. ස්තූතියි!
ස්කෝබි

9
නමුත් ($Env:Path).Split(";") | Get-ChildItem -filter programName*ටයිප් කිරීම එතරම් පහසුය ... ;-)
ක්‍රේග්

පද්ධතිය මඟින් සාමාන්‍යයෙන් විසඳනු ලබන ඔබේ මාර්ගයේ විචල්‍යයක් තිබේ නම් මෙයද අසමත් වේ (aka% JAVA_HOME%).
dragon788

මට වැඩ කිරීමට which.exe ලබා ගත නොහැක, මම මෙය උත්සාහ කර එය ක්‍රියාත්මක විය.
අස්ෆන්ඩ් කාසි

මෙම gcm: පිළිතුර අද PowerShell දුර වඩා හොඳ භාවිතය වනු ඇත stackoverflow.com/a/27140194/5340149
ScriptAutomate



17

සිග්වින් විසඳුමකි. තෙවන පාර්ශවීය විසඳුමක් භාවිතා කිරීම ඔබට ප්‍රශ්නයක් නොවේ නම්, සිග්වින් යනු යා යුතු මාර්ගයයි.

සිග්වින් ඔබට වින්ඩෝස් පරිසරය තුළ * නික්ස් හි සුවපහසුව ලබා දෙයි (ඔබට එය ඔබේ වින්ඩෝස් විධාන කවචයේ භාවිතා කළ හැකිය, නැතහොත් ඔබේ අභිමතය පරිදි * නික්ස් කවචයක් භාවිතා කරන්න). එය ඔබට whichවින්ඩෝස් සඳහා * නික්ස් විධාන (වැනි ) සම්පුර්ණ ධාරකයක් ලබා දෙන අතර, ඔබට එම නාමාවලිය ඔබගේ තුළට ඇතුළත් කළ හැකිය PATH.


10
GnuWin32 Ferruccio විසින් කලින් සඳහන් කළ ඔබ දේශීය ඇති කළ හැකි ලෙස මෙම නඩුවේ වඩා හොඳය එහිදී ක්රියාත්මක පමණක් ය.
පියොටර් ඩොබ්‍රොගොස්ට්

GnuWin32 විශිෂ්ටයි, මම එය භාවිතා කරමි, නමුත් ඔබට GnuWin32 මෙවලම් ස්ථාපනය නොකර මෙම ක්‍රියාකාරීත්වය අවශ්‍ය නම් එහිදී නියම ඇමතුම මෙන් පෙනේ. මම GnuWin32 මෙවලම් අපගේ ජාලයේ \ බින් $ කොටසක තැබුවද ඒවා දේශීයව ස්ථාපනය කර නොමැති වැඩපොළවල් වලින් (සහ කණ්ඩායම් ලිපිගොනු වලින්) භාවිතා කිරීමට මට හැකි වේ.
ක්‍රේග්

1
අපි වින්ඩෝස් හි සිග්වින් භාවිතය ගැන කතා කරන විට, මම වඩාත් කැමති: cygpath -w "` which <appname> `"
mpasko256

12

පවර්ෂෙල් හි, එය gcm, වෙනත් විධානයන් පිළිබඳ ආකෘතිගත තොරතුරු ලබා දෙයි. ක්‍රියාත්මක කළ හැකි මාර්ගය පමණක් ලබා ගැනීමට ඔබට අවශ්‍ය නම්, භාවිතා කරන්න.Source .

උදාහරණයක් ලෙස: gcm gitහෝ(gcm git).Source

තොරතුරු:

  • වින්ඩෝස් එක්ස්පී සඳහා ලබා ගත හැකිය.
  • පවර්ෂෙල් 1.0 සිට ලබා ගත හැකිය.
  • gcmcmdlet හි අන්වර්ථයකිGet-Command .
  • කිසිදු පරාමිතියක් නොමැතිව, එය ධාරක කවචය මඟින් ලබා ගත හැකි සියලුම විධාන ලැයිස්තුගත කරයි.
  • ඔබට අභිරුචි අන්වර්ථයක් නිර්මාණය කර Set-Alias which gcmඑය භාවිතා කළ හැකිය:(which git).Source .
  • නිල ලියකියවිලි: https://technet.microsoft.com/en-us/library/ee176842.aspx

11

මගේ පවර්ෂෙල් පැතිකඩෙහි 'කුමන' නමින් ශ්‍රිතයක් ඇත

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:

වෙනත් විසඳුම් කිසිවක් මා වෙනුවෙන් > get-command app.exe | format-listවැඩ නොකළ නමුත් පරිපූර්ණව ක්‍රියාත්මක විය!
ඇලෙක්සැන්ඩර් මැක්ෆාර්ලන්

10

මෙතැනින් unxutils ලබා ගන්න: http://sourceforge.net/projects/unxutils/

වින්ඩෝස් වේදිකාවල රන්, සියලු හොඳ යුනික්ස් උපයෝගිතා සම්මත වින්ඩෝස් ඩොස් මත තබයි. වසර ගණනාවක් තිස්සේ එය භාවිතා කර ඇත.

එයට 'එය' ඇතුළත් වේ. එය සිද්ධි සංවේදී බව සලකන්න.

සැ.යු: එය ස්ථාපනය කිරීම සඳහා කොතැනක හෝ සිප් එක පුපුරා ගොස් ... x UnxUtils \ usr \ local \ wbin your ඔබේ පද්ධති මාවත env විචල්‍යයට එක් කරන්න.


2
එය සිද්ධි සංවේදී නොවේ, එසේම මට කිව යුතුව ඇත්තේ කුමන ජාවා වෙනුවට වින්ඩෝස් 7
කල්පේෂ් සෝනි

නව රේඛා සමඟ සම්බන්ධ වුවද එය කලකිරීම් කිහිපයක් ඇත; උදාහරණයක් ලෙස grep ඔබ ol .r සඳහා a ඇතුළත් නොකර EOL සමඟ නොගැලපේ . එය 99% විසඳුමක් බව සහතිකයි!
dash-tom-bang

ඔව්, එය සිද්ධි සංවේදී නොවේ, කෙසේ වෙතත් පෙරනිමියෙන් වින්ඩෝස් හි ගොනු නම් සිද්ධි සංවේදී නොවේ.
වර්න්ෆ්‍රයිඩ් ඩොම්ෂෙට්

9

ඔබට නොමිලේ පැස්කල් සම්පාදකයෙකු සොයා ගත හැකි නම්, ඔබට මෙය සම්පාදනය කළ හැකිය. අවම වශයෙන් එය ක්‍රියාත්මක වන අතර අවශ්‍ය ඇල්ගොරිතම පෙන්වයි.

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.

21
ඇවැත්නි, තවමත් පැස්කල් භාවිතා කරන අය සිටීද? :-)
paxdiablo

6
මම හිතන්නේ ඉන්නවා. නමුත් මම නොවේ. Program_date = '17 මාර්තු 1994 'යන රේඛාව ඔබ දුටුවාද;
මාව් පවසන්නේ මොනිකා

1
ඒකකය my_funk;අනවශ්‍යයි. පැස්කල් වැඩසටහනක් පළ කිරීම ගැන ස්තූතියි, මගේ යෞවනය මට මතක් කර දෙයි! පැස්කල් පරිණාමය නොවීම එතරම්ම අනුකම්පාවකි.
යානිස්

2
ඔහ්, නමුත් එය එසේ විය. උදාහරණයක් ලෙස එය දැන් වස්තු දිශානතියට පත්ව ඇත. Lazarus-ide.org හි විශාල නිදහස්, හරස් වේදිකාවක්, ක්‍රියාත්මක කිරීමක් සහ IDE එකක් ඇත . බෝර්ලන්ඩ්හි සෘජු පරම්පරාවක් තවමත් ඩෙල්ෆි හි එම්බාර්කැඩෙරෝ.කොම් / ප්‍රොඩක්ට්ස් / ඩෙල්ෆි හි වාසය කරයි . සහ "භාවිතා කළ හැකි" සංස්කරණය සඳහා k 1k. කෙසේ වෙතත්, එය හරස් වේදිකාවකි - කවුළු, අයිඕ, මැක්, ඇන්ඩ්‍රොයිඩ්. අත්හදා බැලීමේ සංස්කරණයක් ලබා ගන්න හෝ ලාසරුස් භාවිතා කර අවුරුදු 20 ක් බාල යැයි හැඟෙන්න, -)
මාව් පවසන්නේ මොනිකා

1
@yannis "පැස්කල් පරිණාමය නොවූ එවැනි අනුකම්පාවක්" ... 'ටර්බෝ පැස්කල්' ඇන්ඩර්ස් හැරුණු විට ඔබ අදහස් කරන C # නිර්මාණය කිරීමට යන්නේ ඇන්ඩර්ස් ද?
piers7

8

කොටස් Windows හි නමුත් එය ලබා නැති යුනික්ස් සඳහා සේවා සහ එවැනි මෙම එකම දේ ඉටු ක් පමණ පාවෙමින් සරල කණ්ඩායම පිටපත් කිහිපයක් ඇති මේ එක .


1
ඔබ සම්බන්ධ කරන විධානය මඟින් PATH විචල්‍යය පමණක් ප්‍රතිදානය කරන අතර ගොනුව එහි තිබේදැයි පරීක්ෂා නොකරයි.
ඒන්ජල් ඕස්පියර්

7

වින්ඩෝස් හි මා සොයාගත් මෙහි හොඳම අනුවාදය වන්නේ ජෝසෆ් නිව්කොමර්ගේ “කොහේද” උපයෝගීතාවයි, එය ඔහුගේ වෙබ් අඩවියෙන් ලබා ගත හැකිය (ප්‍රභවය සමඟ) .

"කොහේද" සංවර්ධනය පිළිබඳ ලිපිය කියවීම වටී.


1
ප්‍රමාද අදහස් දැක්වීම: වින් 7 64-බිට් යටතේ බිට් 64 ක්‍රියාත්මක කළ හැකි දේ සොයා ගැනීමට ගැටළු ඇත.
ඇක්සෙල් කෙම්පර්


6

මට යුනික්ස් හි වින් 32 වරායන් කිසිවක් අන්තර්ජාලයේ සොයාගත නොහැකි විය, මන්ද ඒවා සියල්ලටම මෙම අඩුපාඩු එකක් හෝ කිහිපයක් තිබේ:

  • වින්ඩෝස් PATHEXT විචල්‍යයට සහය නොදක්වයි. (එමඟින් මාර්ගය පරිලෝකනය කිරීමට පෙර එක් එක් විධානයට ව්‍යංගයෙන් එකතු කරන ලද දිගු ලැයිස්තුව නිර්වචනය කරයි, සහ කුමන අනුපිළිවෙලටද?) (මම බොහෝ tcl ස්ක්‍රිප්ට් භාවිතා කරමි, ඒවා සොයාගත හැකි මෙවලම ප්‍රසිද්ධියේ නොමැත.)
  • Cmd.exe කේත පිටු සඳහා සහය නොදක්වන අතර, එමඟින් ඇස්කි නොවන අක්ෂර සහිත මාර්ග වැරදි ලෙස පෙන්වයි. (මගේ මුල් නමේ with සමඟ: මම ඒ ගැන ඉතා සංවේදී වෙමි)
  • Cmd.exe සහ PowerShell විධාන රේඛාවේ පැහැදිලි සෙවුම් නීති සඳහා සහය නොදක්වයි. (ප්‍රසිද්ධියේ ලබා ගත හැකි කිසිදු මෙවලමක් පවර්ෂෙල් කවුළුවක .ps1 ස්ක්‍රිප්ට් සොයාගන්නේ නැත, නමුත් cmd කවුළුවක නොවේ!)

ඒ නිසා මම අවසානයේදී මගේම දෑ ලිව්වා.

එහි ඇත: http://jf.larvoire.free.fr/progs/which.exe


FYI මම ඉහත සඳහන් කළ මගේ which.exe මෙවලම සහ තවත් බොහෝ දේ github.com/JFLarvoire/SysToolsLib හි විවෘත කර ඇත. ඔබට එහි නවතම අනුවාදය, ගැටළු වාර්තා ආදිය ලබා ගත හැකිය
ජීන්-ප්‍රංශුවා ලාර්වෝර්

6

මෙම කාණ්ඩ ගොනුව CMD විචල්‍ය හැසිරවීම භාවිතා කරමින් මාර්ගයෙහි ක්‍රියාත්මක වන විධානය සොයා ගනී. සටහන: වත්මන් ඩිරෙක්ටරිය සෑම විටම මාර්ගයට පෙර සිදු කරන බව) සහ ඒපීඅයි ඇමතුම භාවිතා කරන්නේ කුමන ස්ථානයද යන්න මත පදනම්ව වෙනත් ස්ථාන මාර්ගයට පෙර / පසු සොයනු ලැබේ.

@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

මම භාවිතා කරන්නේ සිග්වින්ගේ සැහැල්ලු අනුවාදයක් වන GOW (වින්ඩෝස් හි GNU) ය. ඔබ GitHub සිට එය ඩැහැ ගන්න පුළුවන් මෙතන .

GOW (වින්ඩෝස් හි GNU) යනු සිග්වින්ට වඩා සැහැල්ලු විකල්පයකි. එය ස්වදේශීය වින් 32 ද්විමය ලෙස සම්පාදනය කරන ලද අතිශයින්ම ප්‍රයෝජනවත් විවෘත කේත යුනික්ස් යෙදුම් 130 ක් පමණ ස්ථාපනය කරන පහසු වින්ඩෝස් ස්ථාපකයක් භාවිතා කරයි. සිග්වින්ට සාපේක්ෂව එය හැකි තරම් කුඩා, 10 MB පමණ වන පරිදි නිර්මාණය කර ඇති අතර විකල්ප මත පදනම්ව 100 MB ට වඩා හොඳින් ධාවනය කළ හැකිය. - විස්තරය ගැන (බ්‍රෙන්ට් ආර්. මැට්සෙල්)

GOW හි ඇතුළත් කර ඇති විධාන ලැයිස්තුවක තිර රුවක්:

රූප විස්තරය මෙහි ඇතුළත් කරන්න


5

මම නෙඩ් බැට්චෙල්ඩර්ට සමාන මෙවලමක් නිර්මාණය කර ඇත:

PATH හි .dll සහ .exe ගොනු සොයමින්

මගේ මෙවලම මූලික වශයෙන් විවිධ ඩීඑල්එල් අනුවාදයන් සෙවීම සඳහා වැඩි තොරතුරු (දිනය, ප්‍රමාණය, අනුවාදය) පෙන්වන නමුත් එය පැතෙක්ස්ට් භාවිතා නොකරයි (මගේ මෙවලම ඉක්මනින් යාවත්කාලීන කිරීමට බලාපොරොත්තු වෙමි).


5

මෙම වින්ඩෝස් හි එක් ලයිනර් කාණ්ඩ ගොනුවක් පළ කළ යුතුය:

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.


2
මට එය තේරුම් ගැනීමට හැකි වන පරිදි බහුවිධ රේඛාවලට කැමති වනු ඇත. ;-)
ග්‍රින්ගෝ සුව්

4

වින්ඩෝස් එක්ස්පී භාවිතා කරන්නන් සඳහා (කිසිදු whereවිධානයක් ගොඩනගා නැති ), මම "කොහේද කැමති" විධානයක් රුබිජම් ලෙස ලියා whichrඇත.

එය ස්ථාපනය කිරීම සඳහා, රූබි ස්ථාපනය කරන්න.

ඉන්පසු

gem install whichr

එය මෙලෙස ධාවනය කරන්න:

C:> whichr cmd_here


3
වින්ඩෝස් එක්ස්පී හි ඕනෑම දෙයක් කිරීමට ඔබ යෝජනා කරන නිසා ඔබ පහත් කොට සලකනු ඇතැයි මම සැක කරමි.
sebastian-c

1
සුළු පරිමාණ විධානයක් ක්‍රියාත්මක කිරීම සඳහා රූබි ස්ථාපනය කිරීම අසීරු කටයුත්තකි. කණ්ඩායම් පිටපතකට දැමිය හැකි ඉහත ලූපයක් තිබේ.
ග්‍රින්ගෝ සුව්

2
ඔබ එය වාචික මාදිලියේ ධාවනය කරන්නේ නම් එය ද විචර් සඳහා තේමා ගීතයට ආරම්භක රේඛා මුද්‍රණය කරයිද ? ;)
Agi Hammerthief

3

JPSoft වෙතින් TCC සහ TCC / LE යනු CMD.EXE ආදේශන වන අතර එය සැලකිය යුතු ක්‍රියාකාරිත්වයක් එක් කරයි. OP හි ප්‍රශ්නයට අදාළ වන්නේ whichTCC පවුලේ විධාන සකසනයන් සඳහා වන විධානයකි.


2

මම whichමොඩියුලය npm සිට සෑහෙන කාලයක් තිස්සේ භාවිතා කර ඇති අතර එය ඉතා හොඳින් ක්‍රියාත්මක වේ: https://www.npmjs.com/package/which එය විශිෂ්ට බහු වේදිකා විකල්පයකි.

දැන් මම whichGit සමඟ එන දෙයට මාරු වුණෙමි . සාමාන්‍යයෙන් පවතින /usr/binGit වෙතින් මාර්ගය ඔබේ මාර්ගයට එක් කරන්න C:\Program Files\Git\usr\bin\which.exe. මෙම whichද්විමය වනු ඇත C:\Program Files\Git\usr\bin\which.exe. එය වේගවත් වන අතර අපේක්ෂිත පරිදි ක්‍රියා කරයි.


1

මේක උත්සාහ කරන්න

set a=%~$dir:1
If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.