كيفية تقسيم المسارات باستخدام أمر PowerShell Split-Path

هل تحتاج إلى تقسيم المسارات للحصول على أجزاء محددة منها؟ إذا كان الأمر كذلك، فإن PowerShell Split-Path هو الصديق الذي يمكنك الاعتماد عليه. عندما تعمل مع الملفات والشهادات والسجل، ستلاحظ أن المسارات تمثل مواقعها.

وفي بعض الأحيان، قد تحتاج إلى تصفية أي جزء من المسار للعودة، ربما عند القيام بالتأمين. محظوظ لك، ستعلمك هذه الدورة التعليمية طرق استخدام أمر PowerShell Split-Path للقيام بذلك.

هيا! استمر في القراءة، ودعنا نحصل لك على سلاح جديد لأدوات PowerShell الخاصة بك!

المتطلبات المسبقة

إذا كنت تخطط لمتابعة الأمثلة في هذا البرنامج التعليمي التفاعلي، ستحتاج إلى كمبيوتر يعمل بأي نسخة حديثة من ويندوز تحتوي على PowerShell 5.1 أو أحدث. سيتم استخدام ويندوز 10 20H2 مع PowerShell 7.1.1 في هذا البرنامج التعليمي.

ما الذي يحتويه المسار؟

قبل الانغماس في عمق مع أمر PowerShell Split-Path، دعنا نتأكد من أنك واضح حول ما هو المسار. يحدد المسار موقع العنصر الذي يتبع تنسيقًا معينًا.

على سبيل المثال، يمكن أن يكون مسار الملف كالتالي: C:\demo\subfolder1\TestFile_11.txt. إذا قمت بتفريق هذا المسار إلى أجزاء، يتضمن المسار ما يلي:

  • C: is the drive or the qualifier, or the specified path. The qualifier is the part of the path from the left up to the colon (:) character.
  • \demo\subfolder1\ هو المجلد والمجلدات الفرعية أو الحاويات.
  • TestFile_11.txt هو اسم الملف أو الورقة. الورقة هي العنصر الأخير أو الجزء الأخير من المسار.

تذكر، على الرغم من ذلك، أن المسارات ليست حصرية للملفات والمجلدات. قد تشمل المسارات الصحيحة ما يلي:

  • الشهادة (على سبيل المثال، Cert:\CurrentUser\My)
  • السجل (على سبيل المثال، HKCU:\Software)
  • الوظيفة (على سبيل المثال، Function:\New-Guid)
  • المتغير (على سبيل المثال، Variable:\PSEdition)
  • دليل النشاط (على سبيل المثال، AD:\CN=Users,DC=Constoso,DC=com)

معلمات الفصل في PowerShell Split-Path

مثل أي cmdlet، يأتي Split-Path مع مجموعة من المعلمات التي تعدل كيفية سلوك الـ cmdlet وتعيد إخراجها. وهذه المعلمات هي التي تشكل بناء جملة PowerShell Split-Path.

  • -Path – هذه المعلمة تقبل سلسلة أو أكثر من مسارات تريد تقسيمها. تقبل هذه المعلمة أيضًا إدخال الأنابيب. الرموز المميزة في المسارات مقبولة أيضًا.
  • -LiteralPath – مثل المعلمة -Path، تقبل المعلمة -LiteralPath أيضًا مسارات للتقسيم. لكن هذه المعلمة ستعامل المسار فقط كما هو مكتوب. وهذا يعني أن الأمر لن يفسر الرموز المميزة إذا استخدمت هذه المعلمة لتحديد المسارات.
  • -Resolve – هذه المعلمة تخبر cmdlet Split-Path بحل الملفات أو العناصر التي يشير إليها المسار الذي قدمته. بسبب طبيعتها الحرفية، لا يمكنك استخدام هذه المعلمة مع معلمة -LiteralPath.
  • -IsAbsolute – يعيد هذا البارامتر قيمة منطقية لتحديد ما إذا كان المسار الذي حددته هو مسار مطلق أم لا.

تحتوي cmdlet Split-Path في PowerShell أيضًا على بارامتر يسمى -Credential ، والذي يقبل على ما يبدو كائن PSCredential للتصديق. ولكن وفقًا لما ذكرته Microsoft ، لا يتم دعم هذا البارامتر بواسطة أي من موفرات PowerShell المدمجة ويتسبب في حدوث خطأ عند استخدامه.

يُطلق على المعاملات التالية اسم معاملات تحديد موقع التقسيم. تُخبر معاملات هذه العمليات الفرعية في cmdlet Split-Path في PowerShell أي عنصر أو جزء من المسار لإرجاعه. نظرًا لأن الأمر النصي قادر على إرجاع عنصر واحد فقط من المسار ، يمكنك استخدام معامل واحد فقط من هذه المعاملات في كل مرة.

  • -Parent – يعيد الموقع الأصلي (بدون عنصر أو اسم الملف) للمسار الذي حددته. يعتبر هذا البارامتر أيضًا المعامل الافتراضي لتحديد الموقع ، مما يعني أنه يمكنك حذف هذا البارامتر ولا تزال تحصل على الموقع الأصلي كنتيجة.
  • -Leaf – يعيد فقط العنصر الأخير في المسار أو الورقة.
  • -LeafBase – يعيد فقط العنصر الأخير في المسار أو الورقة بدون امتداد. يتوفر هذا البارامتر فقط في PowerShell 6.0 وما فوق.
  • -التمديد – يعيد فقط التمديد الخاص بالورقة (من آخر نقطة ” . ” إلى آخر حرف في المسار). هذا المعلم فقط متاح في PowerShell 6.0 وما فوق.
  • -المؤهل – يعيد فقط محرك الأقراص أو المؤهل للمسار فقط.
  • -بدونمؤهل – يقوم بإزالة محرك الأقراص أو المؤهل من باقي المسار.

باستخدام أمر PowerShell Split-Path (أمثلة)

يسمح لك أمر PowerShell Split-Path بتقسيم وتفكيك أجزاء من المسار. بعد ذلك ، يمكنك تحديد أي جزء من المسار لإعادة التمديد. اعتمادًا على متطلبات الإخراج الخاصة بك ، يمكنك اختيار إعادة المؤهل ، أو المسار بدون مؤهل ، واسم (أسماء) الملف.

الحصول على المجلد الرئيسي للمسار

لإعادة مجلد الوالدين للمسار ، قم بتشغيل أمر PowerShell Split-Path وألصق المعلم -Parent.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Parent

يظهر النتيجة أدناه أن الأمر يعيد مسار المجلد الرئيسي.

Returning the parent containers of the Item

نصيحة: تشغيل أمر PowerShell Split-Path بدون معلمات سيعيد المجلد الرئيسي افتراضيًا ، نفس سلوك استخدام معلم -Parent.

نصيحة: يقبل المعلم -Path مسارات متعددة ، مما يسمح لك بتقسيم قيم المسارات النصية المتعددة في أمر واحد.

e.g., Split-Path -Path 'c:\folder1','c:\folder2'

عرض مسار بدون المؤهل

تخيل أنك تقوم بإنشاء سيناريو يقوم بتكرار هيكل شجرة المجلدات من محرك واحد إلى آخر (على سبيل المثال، C:\demo\subfolder1 إلى D:\demo\subfolder1). قد ترغب في أن يقوم الكود بتقسيم المسار المصدر والحصول على هيكل المجلد فقط بدون حرف المحرك.

للحصول على المسار بدون المحدد، قم بتشغيل أمر PowerShell Split-Path مع المعلمة -NoQualifier مثل الأمر أدناه. يقوم هذا الأمر بتقسيم المسار وحذف حرف المحرك من النتيجة.

Split-Path -Path C:\demo\subfolder1 -NoQualifier

كما يمكن رؤية النتيجة أدناه، باستخدام المعلمة noQualifier يتم إرجاع المسار بدون سلسلة المحدد.

Returning the Path Without the Qualifier

الحصول على المحرك أو المحدد للمسار

قد يكون هناك أوقات عندما تحتاج إلى إرجاع المحدد أو حرف المحرك فقط. على سبيل المثال، عندما ترغب في أن يقوم السيناريو بتلخيص النتائج بناءً على حروف المحرك.

و للقيام بذلك، قم بتشغيل أمر PowerShell Split-Path أدناه مع المعلمة -Qualifier. هذا الأمر سوف يقوم بتقسيم المسار وإرجاع سلسلة المحدد فقط كنتيجة.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Qualifier
Returning the Path’s Drive or Qualifier

عرض اسم الملف أو المجلد أو العنصر

فكر في المسار كشجرة. المحدد يمثل الشجرة نفسها، المجلدات هي الفروع، وفي النهاية، ستجد الورقة. الورقة هي أي سلسلة غير فارغة في نهاية المسار.

عندما تحتاج إلى تقسيم المسار للحصول على الورقة، قم بتشغيل أمر Split-Path أدناه وأضف المعلمة -Leaf.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Leaf

كما يظهر الصورة أدناه، يوضح الأمر أنه تم إرجاع اسم الملف فقط من المسار الذي حددته.

Returning the Path’s Leaf

تقسيم اسم الملف والامتداد (≥PowerShell 6.0)

ملاحظة: ينطبق هذا القسم على PowerShell 6.0 والإصدارات الأحدث.

لقد قمت بتقسيم المسار وإرجاع العنصر. والعنصر في هذه الحالة هو اسم الملف (TestFile_11.txt)، والذي يحتوي على جزئين – القاعدة والامتداد. يسمح لك أمر PowerShell Split-Path بتقسيم العنصر الفرعي إلى هاتين الجزئين باستخدام المعلمة -LeafBase و -Extension.

للحصول على القاعدة والامتداد لاسم الملف، قم بتشغيل الأوامر التالية.

إذا لم يكن للمسار امتداد، ستعيد المعلمة Extension سلسلة فارغة.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -LeafBase
Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Extension
Splitting the Leaf’s Base and Extension

تقسيم اسم الملف والامتداد (≤ Windows PowerShell 5.1)

عذرًا، ولكن المعلمات -LeafBase و -Extension غير متاحة في Windows PowerShell 5.1 والإصدارات الأقدم. لا تقلق، بفضل بعض السحر في PowerShell، يمكنك تكرار نتيجة هذه المعلمات حتى إذا كان لديك فقط Windows PowerShell 5.1.

ولكن بدلاً من ذلك، بدلاً من أمر Split-Path، ستستخدم الشيء الأقرب – تركيبة طريقة split() و مشغل -replace.

A PowerShell string object, such as the path, contains a split() method. This method allows you to split a string into multiple elements based on a delimiter character that you provide. And in the case of paths, the delimiter is the (\\) back-slash character.

من ناحية أخرى، يسمح لك المشغل -replace بتبديل السلاسل باستخدام تعبيرات منتظمة (RegEx).

لمحاكاة نتائج معلمة -LeafBase، قم بتشغيل الأمر التالي في PowerShell.

# قسّم المسار ('C:\demo\subfolder1\TestFile_11.txt') باستخدام '\' كفاصل.
# اختر العنصر الأخير '[-1]' بعد القسم (TestFile_11.txt)
# ابحث عن السلسلة التي تطابق هذا النمط --> '\.[^.]*$'
# ^ سيطابق هذا النمط آخر نقطة "." في المسار وكل الأحرف الأخرى بعد ذلك.
# ثم استبدل التطابق بقيمة فارغة ''.
('C:\demo\subfolder1\TestFile_11.txt').split('\')[-1] -replace '\.[^.]*$',''

نتيجة لذلك، يظهر في الصورة أدناه أن الأمر أرجع فقط اسم الملف الأساسي.

Getting the file base in PowerShell 5.1

الآن، للحصول على امتداد الملف فقط، قم بتشغيل الأمر أدناه في باور شيل.

# قسّم المسار ('C:\demo\subfolder1\TestFile_11.txt') باستخدام '.' كفاصل.
# اختر العنصر الأخير '[-1]' بعد القسم (txt)
('C:\demo\subfolder1\TestFile_11.txt').split('.')[-1]

النتيجة أدناه تظهر أن الأمر أرجع فقط امتداد اسم الملف – txt.

Getting the file extension in PowerShell ≤ 5.1

تحديد ما إذا كان المسار هو مطلق

كمسؤول نظام، ستواجه نوعين من المسارات—المطلق و النسبي. ولكن ما الفرق؟ يبدأ المسار المطلق بمحدد، مثل C:\demo أو HKCU:\Software. على العكس، المسار النسبي لا يحتوي على محدد، مثل .\demo أو \folder1\folder2.

يمكن لأداة سطر الأوامر Split-Path في PowerShell مساعدتك في تحديد المسار المطلق باستخدام المعلمة -IsAbsolute. للقيام بذلك، قم بتشغيل الأوامر أدناه لتحديد ما إذا كان المسار مطلقًا.

# هذا المسار مطلق
Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -IsAbsolute
# هذا المسار نسبي
Split-Path -Path .\demo\subfolder1\TestFile_11.txt -IsAbsolute

كما يمكنك رؤية أدناه، تُرجع المعلمة -isAbsolute قيمة بوليانية للإشارة إلى ما إذا كان المسار مطلقًا (TRUE) أم نسبيًا (FALSE).

Determining if the Path is Absolute

تقسيم وحل المسارات باستخدام الرموز المعيارية

حتى هذه اللحظة، المسارات التي قمت بتقسيمها باستخدام أداة سطر الأوامر Split-Path لا يجب أن تكون موجودة بالفعل. سواء كان المسار موجودًا أم لا، ستقوم هذه الأداة بتقسيمه وتقديم النتيجة لك.

لكن أداة سطر الأوامر Split-Path في PowerShell لديها معلمة أخرى تسمى -Resolve. تُتيح لك هذه المعلمة حل العناصر التي يتم الإشارة إليها بواسطة الرموز المعيارية. وإذا كنت ستستخدم هذه المعلمة، يجب أن يكون المسار الذي ستقسمه والعناصر ضمنه موجودة بالفعل.

على سبيل المثال، لإرجاع العناصر المطابقة لامتداد ملف *.txt، قم بتشغيل الأمر أدناه. المعلمة -Leaf تضمن أن تُرجع أداة السطر الوامرية فقط العناصر وليس الحاويات الأم.

الرمز المعياري (*) يمثل حرفًا واحدًا أو أكثر للتطابق، بينما (؟) يمثل رمز واحد فقط.

Split-Path -Path C:\demo\subfolder1\*.txt -Leaf -Resolve

النتيجة أدناه تعرض الملفات TestFile_11.txt إلى TestFile_20.txt. هذه الملفات جميعًا مطابقة لامتداد اسم الملف .txt.

Resolving matching filenames

لحل تطابق حرف واحد بدلاً من الاستعلام البرمجي الذي يستخدم الرمز النجمي (*)، استخدم الاستعلام البرمجي التالي واستبدل الرمز النجمي بالرمز الاستعلامي (?)

Split-Path -Path C:\demo\subfolder1\TestFile_2?.txt -Resolve -Leaf

الناتج أدناه يظهر فقط الملف TestFile_20.txt لأن هذا الملف هو الوحيد الذي تطابق.

Resolving matching single character

إذا كان المسار يحتوي على حرف هروب، مثل الحرف النقطي الذي يأتي بين العلامتين القاعدتين (“`”)، فضع المسار بين علامتي اقتباس فردي لحل المسار. على سبيل المثال، يقسم ويحل الاستعلام البرمجي أدناه مسارًا يحتوي على حرف هروب.

Split-Path -Path 'C:\demo\subfolder1\dir`n\TestFile_2?.txt' -Leaf -Resolve
Splitting and Resolving a Path with Escape Characters

كدليل على الفكرة، إذا لم تضع المسار بين علامتي اقتباس فردي، سيعيد الاستعلام البرمجي خطأ بأن المسار غير موجود. يحدث نفس الخطأ أيضًا إذا استخدمت علامات اقتباس مزدوجة بدلاً من ذلك.

Split-Path -Path C:\demo\subfolder1\dir`n\TestFile_2?.txt -Leaf -Resolve
Split-Path -Path "C:\demo\subfolder1\dir`n\TestFile_2?.txt" -Leaf -Resolve
Resolving a Path without enclosing single quotation marks

الختام

أداة الأوامر البرمجية Split-Path في PowerShell هي أداة لا غنى عنها لمسؤولي النظام والمستخدمين على حد سواء. هذا البرنامج التعليمي يهدف إلى تعليمك كيفية استخدام أداة الأوامر البرمجية Split-Path لتقسيم أي مسار معين وإرجاع عناصر محددة بناءً على الوسيط الذي تستخدمه.

هل استخدمت أداة الأوامر البرمجية Split-Path في مهامك من قبل؟ إذا لم يكن كذلك، هل قنعك هذا البرنامج التعليمي باستخدامه في مهامك اليدوية أو التلقائية؟ أم هل تعرف طريقة أخرى لتقسيم المسارات بشكل أفضل من أداة الأوامر البرمجية Split-Path في PowerShell؟

Source:
https://adamtheautomator.com/powershell-split-path/