مقدمة: الكشف عن مسارات الأوامر المخفية على نظام التشغيل Windows
يمكن أن تكون تعارضات المسارات مشكلة متكررة للمطورين الذين يعملون مع البرامج النصية والأوامر في سطر أوامر Windows. عندما يطغى برنامج آخر على أحد البرامج النصية الخاصة بك بسبب موضعه في المسار، يصبح من الضروري تحديد المسار الكامل لأمر معين. غالبًا ما يقود هذا السيناريو المستخدمين إلى البحث عن ما يعادل أمر UNIX "what"، مما يبسط تحديد المسار الدقيق للأمر.
في أنظمة UNIX، يتم استخدام الأمر "what" لعرض المسار الكامل لأمر محدد، مما يساعد في حل مشكلات التظليل هذه. ومع ذلك، قد يتساءل مستخدمو Windows عما إذا كانت هناك أداة مساعدة مماثلة متاحة على نظامهم الأساسي. في المناقشة التالية، سنستكشف الخيارات المتاحة على نظام التشغيل Windows لتحقيق نفس الوظيفة ومساعدتك في إدارة المشكلات المتعلقة بالمسار بفعالية.
يأمر | وصف |
---|---|
setlocal | يبدأ توطين متغيرات البيئة في ملف دفعي، مع ضمان عدم تأثير التغييرات على البيئة العالمية. |
for %%i in ("%command%") do | يتكرر من خلال مجموعة العناصر المحددة، مما يسمح بإجراء العمليات على كل عنصر. |
if exist "%%j\%%~i.exe" | يتحقق من وجود ملف معين في المسار المحدد. |
param | يحدد ويستعيد المعلمات التي تم تمريرها إلى برنامج PowerShell النصي. |
Join-Path | يجمع سلسلتين أو أكثر في مسار، ويتعامل مع الأحرف الفاصلة بشكل مناسب في PowerShell. |
Test-Path | التحقق من وجود مسار أو ملف محدد في PowerShell. |
os.pathsep | يسترد فاصل المسار الذي يستخدمه نظام التشغيل، وعادة ما يكون عبارة عن فاصلة منقوطة (؛) على نظام التشغيل Windows. |
os.access(exe, os.X_OK) | يتحقق مما إذا كان الملف قابلاً للتنفيذ في بايثون. |
فهم البرامج النصية لسطر أوامر Windows
في البرامج النصية المقدمة، تم تصميم كل منها لتقليد وظائف UNIX which الأمر، والذي يستخدم لتحديد المسار الكامل للأمر. يستخدم البرنامج النصي الأول ملف دفعي لموجه أوامر Windows. يبدأ ب 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 للتحقق من قابلية التنفيذ. يتم تشغيل هذا البرنامج النصي باستخدام وسيطة سطر أوامر تحدد اسم الأمر، ويطبع المسار الكامل إذا تم العثور على الأمر.
تحديد المسار الكامل للأمر في نظام التشغيل Windows
باستخدام موجه أوامر ويندوز
@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
باستخدام برنامج 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")
تقنيات إدارة المسار المتقدمة في نظام التشغيل Windows
بالإضافة إلى مجرد العثور على المسار الكامل للأمر، فإن إدارة PATH يعد متغير البيئة أمرًا بالغ الأهمية لتجنب التعارضات وضمان التنفيذ السلس للبرامج النصية. في نظام التشغيل Windows، يمكن للمرء استخدام واجهة خصائص النظام لتحرير ملف PATH متغير، ولكن هذا قد يكون مرهقًا للتغييرات المتكررة. بدلا من ذلك، باستخدام setx يمكن أن يوفر الأمر الموجود في موجه الأوامر أو PowerShell طريقة أكثر فعالية لإدارة هذه المتغيرات. ال setx يسمح الأمر للمستخدمين بتعيين متغيرات البيئة باستمرار، وهو أمر مفيد للبرامج النصية التي تتطلب أدوات أو تطبيقات محددة لإعطاء الأولوية في PATH.
أداة أخرى مفيدة هي where الأمر، وهو أداة مساعدة مضمنة في Windows تعمل بشكل مشابه لنظام UNIX which يأمر. ال where يمكن للأمر تحديد وعرض مسارات الملفات القابلة للتنفيذ التي تطابق معايير البحث. على سبيل المثال، تشغيل where python في موجه الأوامر سوف يسرد جميع مواقع ملف Python القابل للتنفيذ الموجود في ملف PATH. يمكن أن يكون هذا مفيدًا بشكل خاص في تحديد التعارضات وحلها عند تثبيت إصدارات متعددة من الأداة. من خلال الجمع بين استخدام setx و where، يمكن للمستخدمين إدارة بيئتهم بشكل أفضل والتأكد من تنفيذ الإصدارات الصحيحة من الأوامر.
الأسئلة المتداولة حول مشكلات مسار الأوامر
- ما هو where الأمر في ويندوز؟
- ال where يقوم الأمر في Windows بتحديد وعرض مسارات الملفات القابلة للتنفيذ المطابقة لمعايير البحث.
- كيف أقوم بتحرير PATH متغيرات البيئة؟
- يمكنك تحرير PATH المتغير من خلال واجهة خصائص النظام أو باستخدام setx الأمر في موجه الأوامر أو PowerShell.
- هل يمكنني استخدام PowerShell للعثور على مسار الأمر؟
- نعم، يمكن استخدام PowerShell للعثور على مسار الأمر باستخدام برنامج نصي يتكرر عبر الدلائل المدرجة في PATH متغيرات البيئة.
- ماهو الفرق بين setx و set في موجه الأوامر؟
- ال set يقوم الأمر بتعيين متغيرات البيئة للجلسة الحالية فقط، بينما setx يضبطها باستمرار عبر الجلسات.
- كيف يمكنني التحقق مما إذا كان الملف قابلاً للتنفيذ في بايثون؟
- يمكنك التحقق مما إذا كان الملف قابلاً للتنفيذ في Python باستخدام os.access(file, os.X_OK).
- ماذا فعلت os.pathsep تفعل في بايثون؟
- ال os.pathsep توفر السمة فاصل المسار الذي يستخدمه نظام التشغيل، وهو عبارة عن فاصلة منقوطة (؛) على نظام التشغيل Windows.
افكار اخيرة:
تعد إدارة مسارات الأوامر وتحديد موقعها بشكل فعال على سطر أوامر Windows أمرًا ضروريًا لتجنب التعارضات وضمان التنفيذ الصحيح للبرنامج النصي. من خلال استخدام الملفات الدفعية والبرامج النصية PowerShell وPython، يمكن للمستخدمين تكرار وظيفة أمر UNIX "what". بالإضافة إلى ذلك، يمكن الاستفادة من أدوات مثل الأمر Where وإدارة متغير PATH في تبسيط هذه العملية. توفر هذه التقنيات حلولاً قوية للحفاظ على بيئة تطوير نظيفة وفعالة، مما يساعد المستخدمين على تحديد المشكلات المتعلقة بالمسار وحلها بسرعة.