উইন্ডোজ কমান্ড লাইনে একটি কমান্ডের সম্পূর্ণ পথ সন্ধান করা

উইন্ডোজ কমান্ড লাইনে একটি কমান্ডের সম্পূর্ণ পথ সন্ধান করা
উইন্ডোজ কমান্ড লাইনে একটি কমান্ডের সম্পূর্ণ পথ সন্ধান করা

ভূমিকা: উইন্ডোজে লুকানো কমান্ড পাথ উন্মোচন

উইন্ডোজ কমান্ড লাইনে স্ক্রিপ্ট এবং কমান্ডের সাথে কাজ করা বিকাশকারীদের জন্য পাথ দ্বন্দ্ব একটি ঘন ঘন সমস্যা হতে পারে। যখন আপনার স্ক্রিপ্টগুলির একটি পাথে বসানোর কারণে অন্য একটি প্রোগ্রাম দ্বারা ছাপানো হয়, তখন একটি প্রদত্ত কমান্ডের সম্পূর্ণ পথ সনাক্ত করা গুরুত্বপূর্ণ হয়ে ওঠে। এই দৃশ্যকল্পটি প্রায়শই ব্যবহারকারীদের UNIX 'কোন' কমান্ডের সমতুল্য অনুসন্ধান করতে পরিচালিত করে, যা একটি কমান্ডের সঠিক পথ সনাক্ত করা সহজ করে।

UNIX সিস্টেমে, 'কোন' কমান্ডটি একটি নির্দিষ্ট কমান্ডের সম্পূর্ণ পথ প্রদর্শন করতে ব্যবহৃত হয়, এই ধরনের ছায়া সমস্যা সমাধানে সহায়তা করে। যাইহোক, উইন্ডোজ ব্যবহারকারীরা ভাবতে পারেন যে তাদের প্ল্যাটফর্মে অনুরূপ ইউটিলিটি উপলব্ধ আছে কিনা। নিম্নলিখিত আলোচনায়, আমরা একই কার্যকারিতা অর্জনের জন্য Windows-এ উপলব্ধ বিকল্পগুলি অন্বেষণ করব এবং আপনাকে পাথ-সম্পর্কিত সমস্যাগুলি কার্যকরভাবে পরিচালনা করতে সহায়তা করব।

আদেশ বর্ণনা
setlocal একটি ব্যাচ ফাইলে এনভায়রনমেন্ট ভেরিয়েবলের স্থানীয়করণ শুরু করে, পরিবর্তনগুলি বিশ্ব পরিবেশকে প্রভাবিত না করে তা নিশ্চিত করে।
for %%i in ("%command%") do আইটেমগুলির নির্দিষ্ট সেটের মাধ্যমে পুনরাবৃত্তি করে, প্রতিটি আইটেমের উপর ক্রিয়াকলাপ সম্পাদন করার অনুমতি দেয়।
if exist "%%j\%%~i.exe" প্রদত্ত পাথে একটি নির্দিষ্ট ফাইল বিদ্যমান কিনা তা পরীক্ষা করে।
param একটি PowerShell স্ক্রিপ্টে পাস করা পরামিতিগুলিকে সংজ্ঞায়িত করে এবং পুনরুদ্ধার করে।
Join-Path একটি পাথে দুই বা ততোধিক স্ট্রিং একত্রিত করে, PowerShell-এ যথাযথভাবে বিভাজক অক্ষর পরিচালনা করে।
Test-Path PowerShell-এ একটি নির্দিষ্ট পথ বা ফাইলের অস্তিত্ব যাচাই করে।
os.pathsep অপারেটিং সিস্টেম দ্বারা ব্যবহৃত পাথ বিভাজক পুনরুদ্ধার করে, সাধারণত উইন্ডোজে একটি সেমিকোলন (;)।
os.access(exe, os.X_OK) পাইথনে একটি ফাইল এক্সিকিউটেবল কিনা তা পরীক্ষা করে।

উইন্ডোজ কমান্ড লাইন স্ক্রিপ্ট বোঝা

প্রদত্ত স্ক্রিপ্টগুলিতে, প্রতিটি UNIX-এর কার্যকারিতা অনুকরণ করার জন্য ডিজাইন করা হয়েছে which কমান্ড, যা একটি কমান্ডের সম্পূর্ণ পথ সনাক্ত করতে ব্যবহৃত হয়। প্রথম স্ক্রিপ্টটি উইন্ডোজ কমান্ড প্রম্পটের জন্য একটি ব্যাচ ফাইল ব্যবহার করে। এটি দিয়ে শুরু হয় setlocal পরিবেশ পরিবর্তনশীল পরিবর্তন স্থানীয়করণ. স্ক্রিপ্ট তারপর কমান্ডের নাম পরিবর্তনশীল সেট করে %command% এবং এটি খালি কিনা তা পরীক্ষা করে। দ্য for %%i in ("%command%") do লুপ তালিকাভুক্ত ডিরেক্টরির মাধ্যমে পুনরাবৃত্তি করে PATH পরিবেশ সূচক। এই লুপের মধ্যে, if exist "%%j\%%~i.exe" লুপের বর্তমান ডিরেক্টরিতে এক্সিকিউটেবল ফাইলটি বিদ্যমান কিনা তা পরীক্ষা করে। যদি পাওয়া যায়, এটি পাথ আউটপুট করে এবং প্রস্থান করে।

PowerShell-এ লেখা দ্বিতীয় স্ক্রিপ্ট, প্যারামিটার সংজ্ঞায়িত করে শুরু হয় param. স্ক্রিপ্ট কমান্ডের নাম পুনরুদ্ধার করে এবং বিভক্ত করে PATH ব্যবহার করে পৃথক ডিরেক্টরিতে পরিবেশ পরিবর্তনশীল $env:PATH -split ';'. দ্য Join-Path কমান্ড সম্ভাব্য এক্সিকিউটেবল পাথ তৈরি করতে কমান্ড নামের সাথে প্রতিটি ডিরেক্টরিকে একত্রিত করে। এটি তারপর ব্যবহার করে Test-Path এই পথের অস্তিত্ব পরীক্ষা করতে। যদি এক্সিকিউটেবল পাওয়া যায়, এটি পাথ আউটপুট করে এবং প্রস্থান করে। পাইথনে লেখা তৃতীয় স্ক্রিপ্ট একটি ফাংশনকে সংজ্ঞায়িত করে which তালিকাভুক্ত ডিরেক্টরিতে কমান্ড অনুসন্ধান করতে PATH পরিবেশ সূচক। এটি ব্যবহার করে os.pathsep সিস্টেমের পথ বিভাজক পেতে এবং os.access নির্বাহযোগ্যতা পরীক্ষা করতে। এই স্ক্রিপ্টটি কমান্ড-লাইন আর্গুমেন্টের সাথে চালানো হয় যা কমান্ডের নাম উল্লেখ করে এবং কমান্ডটি পাওয়া গেলে এটি সম্পূর্ণ পাথ প্রিন্ট করে।

উইন্ডোজে একটি কমান্ডের সম্পূর্ণ পথ নির্ধারণ করা

উইন্ডোজ কমান্ড প্রম্পট ব্যবহার করে

@echo off
setlocal
set "command=%1"
if "%command%"=="" (
  echo Usage: %~n0 command_name
  exit /b 1
)
for %%i in ("%command%") do (
  for %%j in (".;%PATH:;=;.;%;") do (
    if exist "%%j\%%~i.exe" (
      echo %%j\%%~i.exe
      exit /b 0
    )
  )
)
echo %command% not found
endlocal

PowerShell এ কমান্ড পাথ সনাক্ত করা

পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করা

param (
  [string]$command
)
if (-not $command) {
  Write-Output "Usage: .\script.ps1 command_name"
  exit 1
}
$path = $env:PATH -split ';'
foreach ($dir in $path) {
  $exe = Join-Path $dir $command.exe
  if (Test-Path $exe) {
    Write-Output $exe
    exit 0
  }
}
Write-Output "$command not found"

পাইথন দিয়ে কমান্ডের অবস্থান খোঁজা

পাইথন স্ক্রিপ্ট ব্যবহার করা

import os
import sys
def which(command):
    path = os.getenv('PATH')
    for dir in path.split(os.pathsep):
        exe = os.path.join(dir, command)
        if os.path.isfile(exe) and os.access(exe, os.X_OK):
            return exe
    return None
if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py command_name")
        sys.exit(1)
    command = sys.argv[1]
    path = which(command)
    if path:
        print(path)
    else:
        print(f"{command} not found")

উইন্ডোজে অ্যাডভান্সড পাথ ম্যানেজমেন্ট টেকনিক

কেবলমাত্র একটি কমান্ডের সম্পূর্ণ পথ খুঁজে পাওয়ার বাইরে, পরিচালনা করা PATH দ্বন্দ্ব এড়ানো এবং স্ক্রিপ্টের মসৃণ সম্পাদন নিশ্চিত করার জন্য পরিবেশ পরিবর্তনশীল অত্যন্ত গুরুত্বপূর্ণ। উইন্ডোজে, কেউ সম্পাদনা করতে সিস্টেম বৈশিষ্ট্য ইন্টারফেস ব্যবহার করতে পারেন PATH পরিবর্তনশীল, কিন্তু এটি ঘন ঘন পরিবর্তনের জন্য কষ্টকর হতে পারে। পরিবর্তে, ব্যবহার করে setx কমান্ড প্রম্পট বা পাওয়ারশেলের কমান্ড এই ভেরিয়েবলগুলি পরিচালনা করার জন্য আরও কার্যকর উপায় সরবরাহ করতে পারে। দ্য setx কমান্ড ব্যবহারকারীদেরকে নিরবচ্ছিন্নভাবে পরিবেশের ভেরিয়েবল সেট করতে দেয়, যা স্ক্রিপ্টগুলির জন্য দরকারী যেগুলির জন্য নির্দিষ্ট সরঞ্জাম বা অ্যাপ্লিকেশনগুলিকে অগ্রাধিকার দিতে হবে PATH.

আরেকটি দরকারী টুল হল where কমান্ড, যা একটি অন্তর্নির্মিত উইন্ডোজ ইউটিলিটি যা ইউনিক্সের অনুরূপ আচরণ করে which আদেশ দ্য where কমান্ড অনুসন্ধানের মানদণ্ডের সাথে মেলে এমন এক্সিকিউটেবল ফাইলগুলির পথগুলি সনাক্ত এবং প্রদর্শন করতে পারে। উদাহরণস্বরূপ, চলমান where python কমান্ড প্রম্পটে পাওয়া পাইথন এক্সিকিউটেবলের সমস্ত অবস্থানের তালিকা করবে PATH. এটি একটি টুলের একাধিক সংস্করণ ইনস্টল করার সময় দ্বন্দ্ব সনাক্তকরণ এবং সমাধানের জন্য বিশেষভাবে সহায়ক হতে পারে। এর ব্যবহার একত্রিত করে setx এবং where, ব্যবহারকারীরা তাদের পরিবেশকে আরও ভালভাবে পরিচালনা করতে পারে এবং নিশ্চিত করতে পারে যে কমান্ডের সঠিক সংস্করণগুলি কার্যকর করা হয়েছে।

কমান্ড পাথ সমস্যা সম্পর্কে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

  1. কি where উইন্ডোজে কমান্ড?
  2. দ্য where উইন্ডোজের কমান্ড অনুসন্ধানের মানদণ্ডের সাথে মিলে যাওয়া এক্সিকিউটেবল ফাইলগুলির পথগুলি সনাক্ত করে এবং প্রদর্শন করে।
  3. আমি কিভাবে সম্পাদনা করব PATH পরিবেশ সূচক?
  4. আপনি সম্পাদনা করতে পারেন PATH সিস্টেম প্রোপার্টি ইন্টারফেসের মাধ্যমে বা ব্যবহার করে পরিবর্তনশীল setx কমান্ড প্রম্পট বা পাওয়ারশেলে কমান্ড।
  5. কমান্ডের পথ খুঁজে পেতে আমি কি PowerShell ব্যবহার করতে পারি?
  6. হ্যাঁ, PowerShell একটি স্ক্রিপ্ট ব্যবহার করে একটি কমান্ডের পথ খুঁজে পেতে ব্যবহার করা যেতে পারে যা তালিকাভুক্ত ডিরেক্টরিগুলির মাধ্যমে পুনরাবৃত্তি করে PATH পরিবেশ সূচক।
  7. পার্থক্য কি setx এবং set কমান্ড প্রম্পটে?
  8. দ্য set কমান্ড শুধুমাত্র বর্তমান সেশনের জন্য পরিবেশ ভেরিয়েবল সেট করে, যখন setx সেশন জুড়ে তাদের অবিরাম সেট করে।
  9. পাইথনে একটি ফাইল এক্সিকিউটেবল কিনা আমি কিভাবে পরীক্ষা করতে পারি?
  10. পাইথন ব্যবহার করে একটি ফাইল এক্সিকিউটেবল কিনা তা আপনি পরীক্ষা করতে পারেন os.access(file, os.X_OK).
  11. কি করে os.pathsep পাইথনে করবেন?
  12. দ্য os.pathsep attribute অপারেটিং সিস্টেম দ্বারা ব্যবহৃত পাথ বিভাজক প্রদান করে, যা উইন্ডোজে একটি সেমিকোলন (;)।

সর্বশেষ ভাবনা:

দ্বন্দ্ব এড়াতে এবং সঠিক স্ক্রিপ্ট এক্সিকিউশন নিশ্চিত করার জন্য উইন্ডোজ কমান্ড লাইনে কমান্ড পাথগুলি কার্যকরভাবে পরিচালনা এবং সনাক্ত করা অত্যন্ত গুরুত্বপূর্ণ। ব্যাচ ফাইল, পাওয়ারশেল স্ক্রিপ্ট এবং পাইথন ব্যবহার করে, ব্যবহারকারীরা ইউনিক্স 'কোন' কমান্ডের কার্যকারিতা প্রতিলিপি করতে পারে। অতিরিক্তভাবে, যেখানে কমান্ড এবং PATH ভেরিয়েবল পরিচালনার মতো সরঞ্জামগুলি ব্যবহার করা এই প্রক্রিয়াটিকে আরও সুগম করতে পারে। এই কৌশলগুলি একটি পরিষ্কার এবং দক্ষ উন্নয়ন পরিবেশ বজায় রাখার জন্য শক্তিশালী সমাধান প্রদান করে, ব্যবহারকারীদের দ্রুত পথ-সম্পর্কিত সমস্যাগুলি সনাক্ত করতে এবং সমাধান করতে সহায়তা করে।