Вам нужно разделить пути, чтобы получить конкретные их части? Если да, то 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)
- Active Directory (например, AD:\CN=Users,DC=Constoso,DC=com)
Параметры разделения пути PowerShell
Как и любая команда, Split-Path
поставляется с набором параметров, которые управляют тем, как команда ведет себя и возвращает свой вывод. Именно эти параметры составляют синтаксис PowerShell Split-Path
.
-Path
– Этот параметр принимает одну или несколько строк пути, которые вы хотите разделить. Этот параметр также принимает ввод через конвейер. Шаблоны в путях также допустимы.-LiteralPath
– Как и параметр-Path
, параметр-LiteralPath
также принимает пути для разделения. Но этот параметр будет рассматривать путь только так, как он написан. Это означает, что команда не будет интерпретировать шаблоны, если вы используете этот параметр для указания путей.-Resolve
– Этот параметр указывает командеSplit-Path
разрешить файлы или элементы, на которые ссылается указанный вами путь. Из-за его буквальной природы вы не можете использовать этот параметр вместе с параметром-LiteralPath
.-IsAbsolute
– Этот параметр возвращает логическое значение, чтобы определить, является ли указанный вами путь абсолютным или нет.
Команда PowerShell
Split-Path
также имеет параметр, называемый-Credential
, который, предположительно, принимает объект учетных данных PSCredential. Но согласно информации от Microsoft, этот параметр не поддерживается ни одним из предустановленных провайдеров PowerShell и вызывает ошибку при его использовании.
Следующие параметры называются Параметрами местоположения разделения. Эти параметры сообщают команде PowerShell Split-Path
, какой элемент или часть пути возвращать. Поскольку команда может возвращать только один элемент пути, вы можете использовать только один из этих параметров за раз.
-Parent
– Возвращает родительское местоположение (без элемента или имени файла) указанного вами пути. Этот параметр также является параметром местоположения разделения по умолчанию, что означает, что вы можете опустить этот параметр и все равно получить родительское местоположение в качестве результата.-Leaf
– Возвращает только последний элемент пути или лист.-LeafBase
– Возвращает только последний элемент пути или лист без расширения. Этот параметр доступен только в PowerShell 6.0 и выше.-Extension
– Возвращает только расширение файла (от последней точки “.
” до последнего символа пути). Этот параметр доступен только в PowerShell 6.0 и выше.-Qualifier
– Возвращает только диск или квалификатор пути.-NoQualifier
– Удаляет диск или квалификатор из остальной части пути.
Использование командлета PowerShell Split-Path (Примеры)
Командлет PowerShell Split-Path позволяет разбивать и разбирать части пути. После этого вы можете указать, какую часть пути вернуть. В зависимости от требований к выводу вы можете выбрать, вернуть ли квалификатор, путь без квалификатора и/или имя(ена) файла(ов).
Получение родительской папки пути
Чтобы вернуть родительскую папку пути, выполните командлет PowerShell Split-Path
и добавьте параметр -Parent
.
Результат ниже показывает, что команда возвращает путь к родительской папке.

Совет: Запуск командлета PowerShell Split-Path без параметров по умолчанию вернет родительскую папку, то же самое поведение, что и при использовании параметра
-Parent
.
Совет: Параметр
-Path
принимает несколько путей, что позволяет разбивать несколько строк значений путей в одной команде.e.g.,
Split-Path -Path 'c:\folder1','c:\folder2'
Отображение пути без квалификатора
Представьте, что вы создаёте скрипт, который дублирует структуру дерева каталогов с одного диска на другой (например, C:\demo\subfolder1 на D:\demo\subfolder1). Вам может понадобиться, чтобы ваш код разбивал исходный путь и получал только структуру папок без буквы диска.
Чтобы получить путь без квалификатора, выполните команду PowerShell Split-Path
с параметром -NoQualifier
, как показано ниже. Эта команда разбивает путь, исключая при этом букву диска из результата.
Как видно из результата ниже, использование параметра noQualifier
возвращает путь, но без строки квалификатора.

Получение диска или квалификатора пути
Иногда вам может понадобиться вернуть только квалификатор или букву диска. Например, когда вы хотите, чтобы ваш скрипт подводил итоги на основе букв дисков.
Для этого выполните команду PowerShell Split-Path
с параметром -Qualifier
, как показано ниже. Эта команда разобьет путь и вернет только строку квалификатора в результате.

Отображение имени файла, каталога или элемента
Представьте путь как дерево. Квалификатор – это само дерево, папки – это ветви, а в конце вы найдете лист. Листом является любая ненулевая строка в конце пути.
Когда вам нужно разбить путь, чтобы получить лист, выполните команду Split-Path
ниже и добавьте параметр -Leaf
.
Как результат, на изображении ниже показано, что команда вернула только имя файла из указанного вами пути.

Разделение имени файла и расширения (≥PowerShell 6.0)
Примечание: Этот раздел применим к PowerShell 6.0 и выше.
Таким образом, вы разделили путь и получили элемент. В данном случае элементом является имя файла (TestFile_11.txt), которое состоит из двух частей – базовой и расширения. Команда Split-Path
в PowerShell позволяет вам дополнительно разделить лист на эти две части с использованием параметров -LeafBase
и -Extension
.
Чтобы получить базовое имя и расширение файла, выполните следующие команды.
Если путь не содержит расширения, параметр
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.
В результате, на скриншоте ниже показано, что команда вернула только базовое имя файла.

Теперь, чтобы получить только расширение файла, выполните следующую команду в PowerShell.
Результат ниже показывает, что команда вернула только расширение файла – txt
.

Определение, является ли путь абсолютным
Как системный администратор, вы столкнетесь с двумя типами путей—абсолютный и относительный. Но в чем разница? Абсолютный путь начинается с квалификатора, такого как C:\demo или HKCU:\Software. В отличие от этого, относительный путь не имеет квалификатора, как .\demo или \folder1\folder2.
PowerShell Split-Path
cmdlet может помочь вам определить абсолютный путь, используя параметр -IsAbsolute
. Для этого выполните команды ниже, чтобы определить, является ли путь абсолютным.
Как видно ниже, параметр -isAbsolute
возвращает булево значение, указывающее, является ли путь абсолютным (TRUE
) или относительным (FALSE
).

Разделение и разрешение путей с использованием подстановочных символов
До этого момента разбиваемые с помощью Split-Path
пути не обязательно должны существовать. Независимо от того, существует ли путь или нет, этот cmdlet разобьет его и предоставит вам результат.
Однако у cmdlet Split-Path
есть еще один параметр, называемый -Resolve
. Этот параметр позволяет разрешить элементы, на которые ссылаются подстановочные символы. И если вы будете использовать этот параметр, путь, который вы разделите, и элементы внутри него, должны уже существовать.
Например, чтобы вернуть элементы, соответствующие расширению файла *.txt
, выполните команду ниже. Параметр -Leaf
гарантирует, что cmdlet возвращает только элементы, а не родительские контейнеры.
Подстановочный символ (
*
) представляет собой один или несколько символов для сопоставления, а (?
) представляет собой подстановочный символ для одного символа.
Результат ниже перечисляет файлы TestFile_11.txt по TestFile_20.txt. Все эти файлы соответствуют расширению файла .txt
.

Для разрешения совпадения одного символа замените звездочку (*
) на знак вопроса (?
), как показано в следующей команде.
Ниже показан результат только для файла TestFile_20.txt, потому что этот файл единственный, который соответствует условиям.

Если путь содержит символ экранирования, такой как обратная кавычка (“`), заключите путь в одинарные кавычки для его разрешения. Например, команда ниже разбивает и разрешает путь, содержащий символ экранирования.

В качестве доказательства концепции, если вы не заключите этот путь в одинарные кавычки, команда вернет ошибку о том, что путь не существует. Та же ошибка произойдет, если вместо этого использовать двойные кавычки.

Заключение
Командлет PowerShell Split-Path
является незаменимым инструментом для системных администраторов и пользователей. Этот учебник призван научить вас, как командлет Split-Path
может разделять любой заданный путь и возвращать конкретные элементы в зависимости от используемого параметра.
Вы использовали Split-Path
в своих задачах раньше? Если нет, убедил ли вас этот учебник использовать его в ваших ручных или автоматизированных задачах? Или у вас есть другой способ разделения путей, лучший, чем PowerShell Split-Path
?