2015-06-25 140 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運營商在搜索字符串中的反斜槓必須進行轉義。既然你已經在管道上,你可以只使用$ FileInfo對象

$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

_名稱 - 沒有必要對正則表達式

+1

不正確。由於'Get-ChildItem -Recurse'遞歸到子文件夾中,只是回顯'$ _。Name'不會輸出相對於孫子和之下的基本目錄'C:\ ppp \ nn \ trunk \ www \ client'的路徑。 –

+0

是的,道歉,你是對的!我認爲只有文件名是必需的。 –