2017-02-22 39 views
0

Я пытаюсь удалить путь в пути, чтобы получить имя папки в моей переменной, не перепечатывая ее.Удаление пути с помощью PowerShell

Я хочу иметь TASKNAME в вар называется $ строка

я использовал -replace удалить часть.

Путь: C: \ 2017 \ 02 \ 21 \ TaskName \ Шаг \ войти

Это то, что я уже сделал:

$string = "C:\2017\02\21\TaskName\Step\log" 
$string = $string -replace "\\Step\\log$" 

Я пытался что-то вроде:

$string = $string -replace "C:\\*\\*\\*\\$" 

, но это не работает

+0

Так как кажется, ваш путь начинается с даты, вы можете сделать: $ String.split («\») [4] –

ответ

0

Если путь на самом деле существует, то вы можете сделать

(Get-Item "C:\2017\02\21\TaskName\Step\log").Parent.Parent.Name 
+0

Действительно хороший ответ! Спасибо. – AESTHETICS

1

Вы можете использовать Split-Path, чтобы разбить последний компонент с именем пути.

Например.

Split-Path 'C:\Projects\Current\TheProject` 

C:\Projects\Current.

Использование параметра -leaf возвращает последний компонент вместо:

Split-Path -leaf 'C:\Projects\Current\TheProject` 

возвращается TheProject.

И вы можете приковать их вместе

'C:\Projects\Current\TheSolution\ProjectOne' | Split-Path | Split-Path | Split-Path -leaf 

получить Current.

+0

Это было на самом деле полезно, как Что ж. Благодаря! : D – AESTHETICS

0

Ваш код не работает, потому что $ ищет строку поиска с конца. Также * означает 0 или более предыдущих символов.

Так что ваш шаблон "C:\\*\\*\\*\\$" на самом деле ищет что-то вродеC:\\\\ на конце$string.

В вашей второй заменить вам нужно передать параметр как:

$string = $string -replace "^C:\\.+\\" 

Этот шаблон будет выглядеть с самого начала (^), за которым следует C:\ любое количество символов (.+), заканчивающийся на \.

Для получения более подробной информации выполнить следующие команды в PowerShell

get-help about_regular_expressions 
+0

Благодарим вас за разъяснение: «C: \\ * \\ * \\ * \\ $". Я буду иметь ввиду. – AESTHETICS