איך לחלק נתיבים עם פקודת ה־PowerShell Split-Path

האם יש צורך לפרק נתיבים כדי לקבל חלקים ספציפיים ממנו? אם כן, אז ב- PowerShell Split-Path הוא החבר שעליו אתה יכול לסמוך. כשאתה עובד עם קבצים, תעודות והרשומה, תשים לב שהנתיבים מייצגים את מיקומם.

ובמקום מסוים, ייתכן שתצטרך לסנן איזו חלק מהנתיב להחזיר, אולי בזמן שאתה עושה אוטומציה. מזל טוב לך, המדריך הזה ילמד אותך דרכים להשתמש בפקודת PowerShell Split-Path כדי לעשות זאת.

בואו נמשיך! המשך לקרוא ונקבל לך נשק חדש לארסנל שלך ב- PowerShell!

דרישות מוקדמות

אם אתה מתכוון להשתמש בדוגמאות במדריך הפעלה זה, תצטרך מחשב הפועל בגרסה מודרנית של Windows שיש לו PowerShell 5.1 ומעלה. במדריך זה אנו נשתמש ב- Windows 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)

פרמטרים של Split-Path של PowerShell

כמו כל cmdlet, Split-Path מגיע עם סט של פרמטרים שמנהלים כיצד ה-cmdlet נתפקד ומחזירים את הפלט שלו. ופרמטרים אלו הם אשר מרכיבים את תחביר ה-Split-Path של PowerShell.

  • -Path – פרמטר זה מקבל מחרוזות נתיב אחת או יותר שברצונך לפצל. פרמטר זה גם מקבל קלט מצינות. תווים גלויים בנתיבים גם נמוכנים.
  • -LiteralPath – כמו הפרמטר -Path, פרמטר -LiteralPath גם מקבל נתיבים לפיצול. אך פרמטר זה יטפל רק בנתיב כפי שהוא נכתב. במובן, הפקודה לא תפרש תווים גלויים אם תשתמש בפרמטר זה כדי לציין נתיבים.
  • -Resolve – פרמטר זה מגיד ל-cmdlet Split-Path לפתור את הקבצים או הפריטים שנמצאים בנתיב שסיפקת. עקב טבעו הספציפי, אין אפשרות להשתמש בפרמטר זה יחד עם הפרמטר -LiteralPath.
  • -IsAbsolute – משתנה זה מחזיר ערך בוליאני כדי לקבוע האם הנתיב שציינת הוא נתיב מוחלט או לא.

הפקודה של PowerShell Split-Path כן מכילה פרמטר בשם -Credential, שצפוי לקבל אובייקט ניפוי PSCredential. אך לפי מיקרוסופט, פרמטר זה לא נתמך על ידי אף אחד מספקי ה-PowerShell המובנים ומפיק שגיאה בשימוש בו.

הפרמטרים הבאים נקראים פרמטרי מיקום המפצל. פרמטרים אלו מודיעים לפקודת PowerShell Split-Path איזה אלמנט או חלק של נתיב להחזיר. מכיוון שהפקודה יכולה להחזיר רק אלמנט אחד של נתיב, ניתן להשתמש רק באחד מתוך פרמטרים אלו בכל פעם אחת.

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

תצוגת שם של קובץ, תיקייה או פריט

חשוב לראות את הנתיב כמו עץ. הזיהוי יכול להיות העץ עצמו, התיקיות הן הענפים, ובסופם תמצא את העלה. עלה הוא מחרוזת באורך שונה מאפס בסוף הנתיב.

כאשר תרצה לפרק נתיב כדי לקבל את העלה, הפעל את פקודת ה- PowerShell 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), שיש לו שני חלקים – הבסיס והסיומת. פקודת ה-Split-Path של PowerShell מאפשרת לך לפצל גם יותר את העלה לשני חלקים אלו באמצעות הפרמטרים -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, הריצו את הפקודה למטה בפוורשל.

# לחלק את הנתיב ('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.

הְמָזַהֵה PowerShell Split-Path יָכוֹל לעָזוֹר לָךְ לְזַהוֹת נָתִיב מֻלָא בְּאֻמְצָעוּת הַפָּרָמֶטֶר -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 אינם חייבים להיות קיימים. בין אם הנתיב קיים או לא, פקודת זו תפרק אותו ותחזיר לך את התוצאה.

אך ל- 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/