উইন্ডোজ কমান্ড লাইনে 'কোন' এর সমতুল্য আছে?


2350

যেহেতু আমার মাঝে মাঝে পাথ সমস্যা হয়, যেখানে আমার নিজের একটি সিএমডি স্ক্রিপ্টগুলি অন্য প্রোগ্রামের মাধ্যমে (ছায়া গোপন) লুকানো থাকে (আগে পথে), আমি উইন্ডোজ কমান্ড লাইনের একটি প্রোগ্রামের পুরো পথটি সন্ধান করতে সক্ষম হতে চাই শুধু এর নাম।

UNIX কমান্ড 'কোন' এর সমান?

ইউনিক্স-এ, which commandএই ছায়াজনিত সমস্যাগুলি সহজেই খুঁজে পেতে এবং মেরামত করার জন্য প্রদত্ত আদেশের পুরো পথটি মুদ্রণ করে।


3
ফোরেডেকার: "যা" এক্সিকিউটেবলের জন্য PATH অনুসন্ধান করে যা শেল প্রম্পটে একটি কমান্ড টাইপ করলে চালানো হবে।
গ্রেগ হিউগিল

3
উদাহরণস্বরূপ, যদি আপনার জাভা 5 টি সংস্করণ ইনস্টল করা থাকে এবং আপনি জানেন না যে কোনটি ব্যবহার করা হচ্ছে আপনি "কোন জাভা" টাইপ করতে পারেন এবং এটি আপনাকে বাইনারি
প্যাচটি দেয় 4

9
@ ফোরেডেকার, এমআর বলেছেন যে এটি Win2k3 এ "কোথায়" তবে উইন 2 কে 3 এই প্রশ্নের অংশ ছিল না। যদি "যেখানে" অন্যান্য উইন্ডোজ সংস্করণগুলিতে না থাকে তবে অন্যান্য উত্তরগুলিও বৈধ। আইএমএনএসএইচও, সমস্ত উইন্ডোজ সংস্করণে যে উত্তরটি কাজ করে তা সেরা। এছাড়াও, অন্যান্য উত্তরগুলি ভুল নয়, এটি করার বিভিন্ন উপায়।
paxdiablo

36
আমি জানি এই প্রশ্নটি সুপার ইউজারের আগে উত্থাপিত হয়েছিল, তবে এটি সম্ভবত সেখানে belongs
পালসুইম

16
whichস্ট্যান্ডার্ড ইউনিক্সে কোনও কমান্ড নেই । পসিক্স ইউটিলিটি হ'ল type। সি শেলের একটি কমান্ড রয়েছে এবং কিছু সিস্টেমে এটি বহিরাগত সম্পাদনযোগ্য হিসাবে রয়েছে। উদাহরণস্বরূপ, দেবিয়ান লিনাক্সে, whichডাকা একটি প্যাকেজ থেকে আসে debutils। এই বাহ্যিক whichশেলটি বিল্ট-ইনগুলি, উপাধিগুলি বা ফাংশনগুলি "দেখায়" না। typeআছে; বাশের কাছে typeএটি দমন করার উপায় রয়েছে এবং কেবল একটি পথ অনুসন্ধান করা।
কাজ

উত্তর:


2549

উইন্ডোজ সার্ভার 2003 এবং তার পরে (যেমন উইন্ডোজ এক্সপি 32 বিটের পরে কিছু) where.exeপ্রোগ্রাম সরবরাহ করে যা কিছু করে যা কিছু কার্যকর whichকরে, যদিও এটি কেবল এক্সিকিউটেবল কমান্ড নয়, সমস্ত ধরণের ফাইলের সাথে মেলে। (এটি অন্তর্নির্মিত শেল কমান্ডের মতো মেলে না cd)) এটি এমনকি ওয়াইল্ডকার্ড গ্রহণ করবে, সুতরাং where nt*আপনার %PATH%এবং বর্তমান ডিরেক্টরিতে সমস্ত ফাইল খুঁজে পাওয়া যায় যার নাম দিয়ে শুরু হয় nt

where /?সাহায্যের জন্য চেষ্টা করুন ।

নোট করুন যে উইন্ডোজ পাওয়ারশেলটি সেমিডলেটটিরwhere জন্য একটি Where-Objectএলিফ হিসাবে সংজ্ঞা দেয় , তাই আপনি যদি চান তবে আপনাকে এক্সটেনশন where.exeবাদ দেওয়ার পরিবর্তে পুরো নামটি টাইপ করতে হবে .exe


30
না, কারণ গ্রেপ এর ইনপুটটির সামগ্রীগুলি পরীক্ষা করে , যা আপনাকে স্পষ্টভাবে দিতে হবে। যা এবং where.exe কেবল PATH এনভায়রনমেন্ট ভেরিয়েবলগুলিতে সেট করা ডিরেক্টরিগুলির সেটগুলির মধ্যে ফাইলগুলির নাম দেখায় ।
মাইকেল রতনপিন্থ

12
@ আজেদী 32 - সঠিক, যা এক্সপিতে নেই। যেমনটি আমি বলেছি, "উইন্ডোজ সার্ভার 2003 এবং তারপরে"।
মাইকেল রতনপিন্থ

24
উইন্ডোজ 8 এ কাজ করে
লুঠ করুন

57
আপনি যেখানেই টাইপ না করে এই ক্ষমতাশালে কাজ করবে না দেখুন। এক্সি
জনিআআআআআআ

17
মনে রাখবেন যে where.exeএকটি শেল builtin না হয় তবে আপনি থাকতে হবে %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যেহেতু আপনি যে কোনও পরিবেশের পরিবর্তনশীল (অবশ্যই পথের বিন্যাসে) ব্যবহার করতে চান তা প্রতিস্থাপন করতে পারেন।


এবং, যদি আপনি এমন একটি চান যা পাঠাথের সমস্ত এক্সটেনশান পরিচালনা করতে পারে (যেমন উইন্ডোজ নিজেই করে), তবে এটি একটি কৌশলটি করে:

@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
আরে, আমি যদি তা শিখতাম! খুব খারাপ এটি এমএস-ডস বা উইন 9 এক্স (এটি কমান্ড ডট কম সহ) এর সাথে কাজ করে না। (রেমন্ড চেনের আরও একটি "বিস্তৃত" সংস্করণ রয়েছে যা আপনি একটি ব্যাচের ফাইলে পরিণত করতে পারেন: ব্লগস.এমএসএনএন / োল্ডনিউথিং / অর্চিভ / ২০০৫ / ০১ / ২০ / ৩7272২২.এসপিএক্স )
মাইকেল রতনপীণ্থ


উইন্ডোজগুলি এক্সেক্স থেকে এক্সিকিউটেবল হিসাবে স্বীকৃতি দেয়। শেষবার আমি whichডাব্লু 95 / ডস দিনগুলিতে একটি পিছনে কোডিং করলাম, সন্ধানের আদেশটি ছিল - বর্তমান দির, তারপরে প্রতিটি পাথ ডির, সেমিডি.কম জন্য, তারপর সেমিডি.এক্সি, তারপরে সেমিডি.বাট সুতরাং, বর্তমান ডিয়ারে এমনকি সেন্টিমিডি.বাট হয় মৃত্যুর আগে সোমবারে befroe cmd.exe নির্বাহ করা হয়েছে
মাওগ বলেছেন, মনিকা

3
@ এমএইচজিও, মূলটি যেখানে আপনি এক্সটেনশানটি জানেন তা সেহেতু এটি ইউনিক্সের অধীনে যা আয়না করে (যেখানে সেই এক্সটেনশন-যুক্ত করার কৌশল ঘটে না)। আমি এখন একটি যুক্ত করেছি যা আপনার ইচ্ছামতো করতে পারে তবে এটি এখন কোনও সরল কমান্ড এতটা স্ক্রিপ্টের মতো নেই। এটি প্রথমে অপরিকল্পিত কমান্ডটি ব্যবহার করে তারপরে প্রতিটি এক্সটেনশনটি চেষ্টা করে। আশা করি এইটি কাজ করবে. আপনি যথাযথ দেখতে দেখতে এটি আপনার প্রয়োজনীয়তার সাথে সামঞ্জস্য করতে পারেন (যদি আপনি উইন্ডোজ হিসাবে একই অনুসন্ধান ক্রম চান তবে উদাহরণস্বরূপ - এটি সমস্ত সম্ভাবনা দেখায়)।
প্যাক্সিডিয়াবলো

2
এটিকে একটি ব্যাচের স্ক্রিপ্টে রূপান্তর করতে, "which.bat" নামে একটি ফাইল তৈরি @echo off for %%i in (%1) do @echo. %%~$PATH:%i করুন: এটির জন্য একটি লেভেল.বাট স্ক্রিপ্ট যুক্ত করতে আপনি যখনই cmd.exe চালান তখন লোড করুন (উপরের স্ক্রিপ্টটি একটি নতুন ডিরেক্টরিতে সি: \ ইউএসআর বলে। \ উপাধি): DOSKEY which=C:\usr\aliases\which.bat $* তারপরে আপনি উপদ্বীপ.বাট ফাইলের সাথে cmd.exe প্রবর্তনের জন্য একটি স্ক্রিপ্ট তৈরি করতে পারেন: cmd.exe /K E:\usr\aliases\alias.bat
ব্র্যাড টি।

151

পাওয়ারশেলের অধীনে, 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, ফাংশন, alias লেখা, ফাইল খুঁজে বের করে মাধ্যমে কাস্টম এক্সেকিউটেবল এক্সটেনশনগুলি সহ $Env:PATHEXT, ইত্যাদি বর্তমান শেল (বেশ ব্যাশ এর সদৃশ জন্য সংজ্ঞায়িত 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) এ যুক্ত করা দরকার PATHGet-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


2
এটি কেবল এক্সিকিউটেবলের চেয়ে অনেক বেশি আবিষ্কার করে। এটি কমান্ড ফাইলগুলিও
ধরেছে

2
@ TheIncorr وړ1 - আপনি যদি কমান্ড ফাইলগুলি যেমন ব্যাচ ফাইলগুলি ( .BAT, .CMDইত্যাদি) বোঝাতে চান তবে সেগুলি এক্সিকিউটেবল হিসাবে বিবেচিত হয় কারণ তাদের এক্সটেনশনগুলি PATHEXTভেরিয়েবলের নাম দেওয়া হয়েছে (যা পূর্বনির্ধারিতভাবে হয় PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL)। অন্যান্য এক্সিকিউটেবল টাইপ (যেমন .py, .rbইত্যাদি) ফাইল এক্সটেনশান যুক্ত করে এবং assoc/ ftype- এর সাথে এক্সিকিউটেবল অ্যাসোসিয়েশন তৈরি করে যোগ করা যায়
ডকস.পাইথন.অর্গ

59

উইন্ডোজ পাওয়ারশেলের মধ্যে:

set-alias which where.exe

40

যদি আপনি পাওয়ারশেল ইনস্টল করেছেন (যা আমি প্রস্তাব দিই), আপনি নীচের কমান্ডটি মোটামুটি সমতুল্য হিসাবে ব্যবহার করতে পারেন (আপনার এক্সিকিউটেবলের নামের বিকল্প প্রোগ্রামের নাম):

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

আরও এখানে: আমার মানিচ! পাওয়ারশেল যা


1
আমি এই সঠিক পীথি পাওয়ারশেল কমান্ডটি সন্ধান করছিলাম। আমি There.exe ব্যবহার করে যাচ্ছিলাম তবে এর আউটপুট পার্সিংয়ের শীর্ষে ত্রুটি কোডটি নিয়ে গোলমাল হওয়া কোনও দেশীয় পাওয়ারশেল সমাধানের চেয়ে নিকৃষ্ট। ধন্যবাদ!
স্কোবি

9
তবে ($Env:Path).Split(";") | Get-ChildItem -filter programName*টাইপ করা এত সহজ ... ;-)
ক্রেগ

আপনার পথে যদি এমন কোনও পরিবর্তনশীল থাকে যা সাধারণত সিস্টেমের দ্বারা সমাধান করা হয় তবে এটি ব্যর্থ হয় (ওরফে% জেভিএহোম%%)।
ড্রাগন 788

আমি কোন.কমকে কাজ করতে পারি না, এটি চেষ্টা করেছি এবং এটি কাজ করেছে।
আসফান্দ কাজী

37

GnuWin32 সরঞ্জাম আছে whichঅন্যান্য ইউনিক্স সরঞ্জামের একটি পুরো বধ সাথে।


24

উইন্ডোজ সিএমডি whichকলগুলিতে where:

$ where php
C:\Program Files\PHP\php.exe

17

সাইগউইন একটি সমাধান। যদি আপনি কোনও তৃতীয় পক্ষের সমাধান ব্যবহার করতে আপত্তি করেন না, তবে সাইগউইন হ'ল উপায়।

সাইগউইন আপনাকে উইন্ডোজ পরিবেশে * নিক্সের স্বাচ্ছন্দ্য দেয় (এবং আপনি এটি আপনার উইন্ডোজ কমান্ড শেলটিতে ব্যবহার করতে পারেন, বা আপনার পছন্দের একটি * নিক্স শেল ব্যবহার করতে পারেন)। এটি আপনাকে whichউইন্ডোজের জন্য * নিক্স কমান্ডের একটি সম্পূর্ণ হোস্ট দেয় (যেমন ) এবং আপনি কেবলমাত্র সেই ডিরেক্টরিটিকে নিজের মধ্যে অন্তর্ভুক্ত করতে পারেন PATH


10
GnuWin32 Ferruccio দ্বারা উল্লেখ করেছে আগে অনেক এই ক্ষেত্রে উত্তম হিসাবে আপনি নেটিভ থাকতে পারে যেখানে এক্সিকিউটেবল একা।
পাইওটার ডব্রোগোস্ট

GnuWin32 দুর্দান্ত, এবং আমি এটি ব্যবহার করি তবে আপনি যদি GnuWin32 সরঞ্জামগুলি ইনস্টল না করে এই কার্যকারিতাটি চান তবে যেখানে ডান কলটি মনে হয় ex যদিও, আমি GnuWin32 সরঞ্জামগুলিকে আমাদের নেটওয়ার্কে একটি \ বিন $ ভাগ করে রেখেছি যাতে আমি সেগুলি স্থানীয়ভাবে ইনস্টল না করে ওয়ার্কস্টেশনগুলি (এবং ব্যাচ ফাইলে) থেকে ব্যবহার করতে পারি।
ক্রেগ

1
যখন আমরা উইন্ডোজে সাইগউইনের ব্যবহার সম্পর্কে কথা বলি, আমি পছন্দ করি: সাইগপথ -w "` যা <appname> `"
এমপাসকো 256

12

পাওয়ারশেল-এ, এটি gcmঅন্যান্য কমান্ড সম্পর্কে ফর্ম্যাট তথ্য দেয়। আপনি যদি কেবলমাত্র নির্বাহযোগ্য পথে পুনরুদ্ধার করতে চান তবে ব্যবহার করুন.Source

উদাহরণস্বরূপ: gcm gitবা(gcm git).Source

টুকরো অংশ:

  • উইন্ডোজ এক্সপির জন্য উপলব্ধ।
  • পাওয়ারশেল 1.0 থেকে উপলব্ধ Available
  • gcmসেমিডলেট এর একটি উপনাম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

এখান থেকে অনাহত পেতে যান: http://sourceforge.net/projects/unxutils/

উইন্ডোজ প্ল্যাটফর্মগুলিতে স্বর্ণ, একটি দুর্দান্ত উইন্ডোজ ডসগুলিতে সমস্ত দুর্দান্ত ইউনিক্স ইউটিলিটি রাখে। বছরের পর বছর ধরে এটি ব্যবহার করা হয়েছে।

এটি একটি 'যা' অন্তর্ভুক্ত আছে। এটি ক্ষেত্রে সংবেদনশীল যদিও নোট করুন।

নোট: এটি ইনস্টল করতে কোথাও জিপটি বিস্ফোরিত হবে এবং আপনার সিস্টেমের পাথ env ভেরিয়েবলের সাথে ... \ UnxUtils \ usr \ local \ wbin। যুক্ত করুন।


2
এটি সংবেদনশীল নয়, এটিও বলতে হবে যে জাভা.এক্সে পরিবর্তে কোন জাভা - উইন্ডোজ 7
কল্পনা সনি

এটি নতুন লাইনগুলি সহ কিছুটা হলেও হতাশাগ্রস্থ হয়েছে; উদাহরণস্বরূপ গ্রেপ আপনি .\ আর এর জন্য একটি স্থাপন না করে EOL এর সাথে মেলে না । এটি একটি 99% সমাধান যদিও নিশ্চিত!
ড্যাশ-টম-ব্যাং

হ্যাঁ, এটি কেস সংবেদনশীল নয়, তবে উইন্ডোজে ডিফল্টরূপে ফাইলের নামগুলিও সংবেদনশীল নয়।
ওয়ার্নফ্রিড ডমসচাইট

8

স্টক উইন্ডোজ নয় তবে এটি ইউনিক্সের জন্য পরিষেবাদি দ্বারা সরবরাহ করা হয়েছে এবং বেশ কয়েকটি সাধারণ ব্যাচের স্ক্রিপ্ট রয়েছে যা প্রায় একই জিনিস সম্পাদন করে accomp এই এক


1
আপনি যে কমান্ডটি সংযুক্ত করছেন তা কেবলমাত্র PATH ভেরিয়েবলকে আউটপুট করে এবং ফাইলটি সেখানে পাওয়া যায় কিনা তাও পরীক্ষা করে না।
এঞ্জেল ও'স্পিয়ার

8

যদি আপনি একটি নিখরচায় পাস্কাল সংকলকটি খুঁজে পান তবে আপনি এটি সংকলন করতে পারেন। কমপক্ষে এটি কাজ করে এবং প্রয়োজনীয় অ্যালগরিদম দেখায়।

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
বাহ, এখনও কি লোকেরা পাস্কাল ব্যবহার করছে? :-)
প্যাক্সিডিয়াবলো

6
আমি ভাবছি যে আছে। কিন্তু আমি না. আপনি কি লাইন প্রোগ্রামটি দেখেছেন_সামগ্রী = '17 মার্চ 1994 ';
মাওগ বলছে মনিকা

1
ইউনিট my_funk;অপ্রয়োজনীয়। একটি পাস্কাল প্রোগ্রাম পোস্ট করার জন্য ধন্যবাদ, আমার যৌবনের কথা মনে করিয়ে দেয়! এটি এমন করুণা যে পাসকালের বিকাশ ঘটেনি।
ইন্নিস

2
ওহ, কিন্তু এটা হয়েছে। উদাহরণস্বরূপ এটি এখন অবজেক্ট ওরিয়েন্টেড। লজারাস-ide.org এ একটি দুর্দান্ত ফ্রি, ক্রস-প্ল্যাটফর্ম, বাস্তবায়ন এবং আইডিই রয়েছে এবং বোরল্যান্ডের প্রত্যক্ষ বংশধর এখনও এমপ্লেকাডেরো / প্রোডাক্টস / ডেলফিতে ডেলফিতে থাকেন যা স্টার্টার সংস্করণের জন্য 299 ডলারে খুব ব্যয়বহুল (ইমো) হয় এবং "ব্যবহারযোগ্য" সংস্করণের জন্য k 1k। তবে এটি ক্রস প্ল্যাটফর্ম - উইন্ডোজ, আইও, ম্যাক, অ্যান্ড্রয়েড। একটি ট্রায়াল সংস্করণ পান বা লাজার ব্যবহার করুন এবং 20 বছর কম বয়সের অনুভূতি পান -
মগ জানান

1
@ অ্যান্নিস "এমন করুণাময় যে পাস্কলটি বিকশিত হয়নি" ... 'টার্বো পাস্কাল' ছাড়াও অ্যান্ডার্স সি # ডিজাইন করতে যাচ্ছেন মানে?
পাইরেস 7

7

উইন্ডোজটিতে আমি এর সেরা সংস্করণটি পেয়েছি হ'ল জোসেফ নিউকামারের "সেখানে" ইউটিলিটি যা তার সাইট থেকে পাওয়া যায় (উত্স সহ) ।

"হেইসিস" এর বিকাশ সম্পর্কে নিবন্ধটি পড়ার মতো।


1
দেরিতে মন্তব্য: এতে উইন 7 64৪-বিটের অধীনে -৪-বিট এক্সিকিউটেবলগুলি খুঁজে পেতে সমস্যা রয়েছে।
এক্সেল কেম্পার


6

ইউনিক্সের উইন 32 পোর্টগুলির মধ্যে যেটি আমি ইন্টারনেটে সন্ধান করতে পারি তা কোনওটিই সন্তোষজনক নয়, কারণ তাদের সকলেরই এই এক বা একাধিক ত্রুটি রয়েছে:

  • উইন্ডোজ পাঠ্য ভেরিয়েবলের জন্য কোনও সমর্থন নেই। (যা পাথ স্ক্যান করার আগে প্রতিটি কমান্ডের সাথে অন্তর্ভুক্ত এক্সটেনশনের তালিকাটি সংজ্ঞায়িত করে এবং কোন ক্রমে () (আমি প্রচুর টিসিএল স্ক্রিপ্ট ব্যবহার করি এবং কোন সরঞ্জাম এগুলিকে সন্ধান করতে পারে তা প্রকাশ্যে উপলব্ধ নেই))
  • সেমিডি.এক্সি কোড পৃষ্ঠাগুলির জন্য কোনও সমর্থন নেই, যা তাদের ভুল-অ্যাস্কি অক্ষর সহ পাথ প্রদর্শন করে। (আমি এতে প্রথম সংক্ষেপে :-) সহ খুব সংবেদনশীল)
  • Cmd.exe এবং পাওয়ারশেল কমান্ড লাইনে স্বতন্ত্র অনুসন্ধান বিধিগুলির জন্য কোনও সমর্থন নেই। (সর্বজনীনভাবে উপলব্ধ কোনও সরঞ্জাম পাওয়ারশেল উইন্ডোতে .ps1 স্ক্রিপ্টগুলি পাবেন না, তবে একটি সেমিডি উইন্ডোতে পাবেন না!)

সুতরাং আমি অবশেষে আমার নিজের লিখেছি, যে উপরের সমস্ত সঠিকভাবে সমর্থন করে।

সেখানে উপলব্ধ: http://jf.larvoire.free.fr/progs/which.exe


এফওয়াইআই আমি গিথুব . com/ জেএফএলআরভায়ার / সিসটুলসলিবের উপরে উল্লিখিত আমার যা.সেক্স সরঞ্জামটি এবং অন্যান্য অনেকগুলি খোলামেলা করেছি । আপনি সেখানে সর্বশেষ সংস্করণ, রিপোর্ট সমস্যা, ইত্যাদি পেতে পারেন
জাঁ ফ্রাসোয়া Larvoire

6

এই ব্যাচ ফাইলটি সিএমডি ভেরিয়েবল হ্যান্ডলিং ব্যবহার করে যে পথে চালিত হবে সেই আদেশটি খুঁজে পেতে। দ্রষ্টব্য: বর্তমান ডিরেক্টরিটি সর্বদা পাথের আগে করা হয়ে থাকে) এবং কোন এপিআই কল ব্যবহৃত হয় তার উপর নির্ভর করে পাথের আগে / পরে অনুসন্ধান করা হয়।

@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 (উইন্ডোজে জিএনইউ) ব্যবহার করছি যা সাইগউইনের হালকা সংস্করণ। আপনি এটি এখানে গিটহাব থেকে দখল করতে পারেন ।

জিওউ (উইন্ডোজে জিএনইউ) হ'ল সাইগউইনের হালকা ওজনের বিকল্প। এটি একটি সুবিধাজনক উইন্ডোজ ইনস্টলার ব্যবহার করে যা নেটিভ উইন 32 বাইনারি হিসাবে সংকলিত প্রায় 130 অত্যন্ত কার্যকর ওপেন সোর্স ইউনিক্স অ্যাপ্লিকেশন ইনস্টল করে। এটি যতটা সম্ভব ছোট হিসাবে ডিজাইন করা হয়েছে, প্রায় 10 এমবি, সাইগউইনের বিপরীতে যা অপশনগুলির উপর নির্ভর করে 100 এমবি-র উপরে ভালভাবে চলতে পারে। - বর্ণনা সম্পর্কে (ব্রেন্ট আর। ম্যাটজেল)

GOW এ অন্তর্ভুক্ত কমান্ডের তালিকার একটি স্ক্রিনশট:

এখানে চিত্র বিবরণ লিখুন


5

আমি নেড ব্যাচেল্ডারের মতো সরঞ্জাম তৈরি করেছি:

PATH এ .dll এবং .exe ফাইল অনুসন্ধান করা হচ্ছে

যদিও আমার সরঞ্জামটি প্রাথমিকভাবে বিভিন্ন dll সংস্করণ অনুসন্ধান করার জন্য এটি আরও তথ্য দেখায় (তারিখ, আকার, সংস্করণ) তবে এটি পাঠ্য ব্যবহার করে না (আমি আশা করি শীঘ্রই আমার সরঞ্জাম আপডেট করব)।


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

এটি চালান:

সি:> যা সেন্টিমিটার_এখানে


3
আমি সন্দেহ করি যে আপনি উইন্ডোজ এক্সপি-তে কিছু করার পরামর্শ দিচ্ছেন বলে আপনি বঞ্চিত হচ্ছেন।
সেবাস্তিয়ান-সি

1
ডাউনভোট করেনি তবে তুচ্ছ কমান্ড প্রয়োগ করতে রুবি ইনস্টল করাও একটি শক্ত বিক্রয়। উপরে একটি লুপ রয়েছে যা ব্যাচের স্ক্রিপ্টে রাখা যেতে পারে।
গ্রিংগো সুভেভ

2
আপনি যদি ভার্বোজ মোডে চালান তবে এটি উইটচারের থিম সংতে প্রারম্ভিক লাইনগুলি মুদ্রণ করে ? ;)
আগি হামার্থিফ

3

জেপিএসফট থেকে টিসিসি এবং টিসিসি / এলই সিএমডি.এক্সই প্রতিস্থাপন যা উল্লেখযোগ্য কার্যকারিতা যুক্ত করে। ওপির প্রশ্নের সাথে সম্পর্কিত, whichটিসিসি পরিবার কমান্ড প্রসেসরগুলির জন্য একটি বিল্টিন কমান্ড।


2

আমি whichএনপিএম থেকে মডিউলটি বেশ কিছুক্ষণ ব্যবহার করেছি এবং এটি খুব ভালভাবে কাজ করে: https://www.npmjs.com/package/With এটি একটি দুর্দান্ত বহু প্ল্যাটফর্ম বিকল্প।

এখন আমি গিটারের সাথে চলে এলাম which/usr/binগিট থেকে সাধারণত আপনার পথে যাত্রা করুন C:\Program Files\Git\usr\bin\which.exewhichবাইনারি হতে হবে C:\Program Files\Git\usr\bin\which.exe। এটি দ্রুত এবং আশা হিসাবেও কাজ করে works


1

এটা চেষ্টা কর

set a=%~$dir:1
If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.