2015-06-25 2 views
2

Следующий сценарий отображает все файлы в каталоге и возвращает их имя и путь в консоли.Удалить родительский путь

В результате, как:

C:\Projects\company\trunk\www\client\project\customer\start.js 

мне нужно вместо удаления начальной части и имеющие результат как

project\customer\start.js 

Я не в состоянии установить правильное регулярное выражение заменить. Не могли бы вы указать мне в правильном направлении?

Get-ChildItem -Path C:\Projects\company\trunk\www\client\project -Filter *.js -Recurse -File | 
    Sort-Object Length -Descending | 
    ForEach-Object { 
    $_ = $_ -replace '\\C:\Projects\company\trunk\www\client\project', '' 
    "'" + $_.FullName + "'," 
    } 
+0

Что такое 'NNN + длинный файл. путь' должен был быть? 'FullName' будет содержать полный путь, который выглядит как вещь, которую вы пытаетесь удалить. Можете ли вы обновить вопрос с помощью реального примера того, что вы видите и чего хотите видеть? – arco444

+0

Я сделал правку с примером моего реального мира. Спасибо за ваше время. – GibboK

+0

Возможный дубликат [Как преобразовать абсолютный путь в относительный путь в powershell?] (Http://stackoverflow.com/questions/12396025/how-to-convert-absolute-path-to-relative-path-in-powershell) – n0rd

ответ

4

$_ является FileInfo объектом, а не строка, путь не начинается с обратным косыми чертами, и обратные косые в строке поиска должны быть экранированы, если вы хотите использовать оператор -replace.

Попробуйте это:

$basedir = 'C:\ppp\nnn\trunk\www\client' 
$pattern = [regex]::Escape("^$basedir\") 

Get-ChildItem -Path "$basedir\nnn" -Filter *.js -Recurse -File | 
    Sort-Object Length -Descending | 
    ForEach-Object { $_.FullName -replace $pattern } 
0

Поскольку у вас есть объект FileInfo на трубопроводе можно просто использовать $ _ Name - нет необходимости в регулярном выражении

+1

Неправда. Так как 'Get-ChildItem -Recurse' рекурсирует во вложенные папки, то только эхо-значение' $ _. Name' не выводит путь относительно базового каталога 'C: \ ppp \ nnn \ trunk \ www \ client' для внуков и ниже. –

+0

Да, извинения, вы правы! Я думал, что требуется только имя файла. –

Смежные вопросы