2017-09-13 18 views
0
分离路径

我很困惑,当我有一个很长的目录结构,因为我用内赢得我的电脑上的Dropbox的驱动器如何正确使用拆分路径为PowerShell的第5版10.与长目录名在PowerShell中

我的问题域是递归旅行的我做了更改软件的几个目录,有多种版本,有时每个目录都有两个或三个子目录深在几个地方。

的目录结构我已经和它开始在C:\用户\ XXXX \ Dropbox的\做\ SoftwareName \发布

“释放”字段,以显示我想要的版本号要能总结一下我的报告.. \ Release目录下的版本号。位置是因此,使用-Leaf和文件名作为文件的最后一个(子)-directory。

我用(编辑代码:。所示为改变我学到我很高兴在输出由于引用集合花括号

cd C:\Users\XXXX\Dropbox\Doing\SoftwareName\Releases 

    Get-ChildItem -Path (Get-Location) -Filter *.cs -Recurse | 
ForEach-Object { 
    $Release = $_.Directory.Split('\') -like "*Version*" 
    $Location = Split-Path ($_.DirectoryName) -Leaf 
    $File = $_.Name 
     ForEach-Object { 
      New-Object PSObject -Property @{ 
       Release = $Release.ToString() 
       Location= $Location.ToString() 
       File = $File.ToString() 
       } 
     } | Format-Table -AutoSize Release, Location, File 
} 

输出(第一三条线,以简化)

Release                
    Location File         
     C:\Users\XXXX\Dropbox\Doing\SoftwareName\Releases\Version1\StoryWriter StoryWriter Chapter1.cs 
     C:\Users\XXXX\Dropbox\Doing\SoftwareName\Releases\Version2\StoryWriter\Outline\BeachScene BeachScene Chapter2.cs 
     C:\Users\XXXX\Dropbox\Doing\SoftwareName\Releases\Version3\StoryWriter\Outline\Conversations Conversations Chapter3.cs 

结果我之后

Release Location File    
------- -------- ----            
Version1 StoryWriter Chapter1.cs 
Version2 BeachScene Chapter2.cs 
Version3 Conversations Chapter3.cs 

非常感谢。

回答

1

可以acheive选择对象的这个计算使用性能,只能继续自己在做什么:

我摆脱了第二foreach-object,你有第一内,因为它的服务没有任何意义的。此外,如果你打算使用foreach-object需要管的集合作为输入。

既然你想显示release列我用正则表达式解析路径下了版本的文件夹名称。也许有更好的方法来做到这一点,但无论如何服务于此目的。只要版本文件夹前面有releases文件夹,这将工作。

Get-ChildItem -Path (Get-Location) -Filter *.cs -Recurse | 
ForEach-Object { 

     New-Object PSObject -Property @{ 
        Release = ([regex]::Matches($_.DirectoryName,'(?<=Releases\\)\w+\\') | select -ExpandProperty value) -replace '\\' 
        Location= Split-Path ($_.DirectoryName) -Leaf 
        File = $_.Name 
       } 


} | Format-Table -AutoSize Release, Location, File 
+0

谢谢@ Esperento57和基兰您的反馈。我花了几天的时间休息一下,用新鲜的眼光看着它,同时考虑到正则表达式和分割问题,我制定了一个解决方案。 –

0

试试这个:

Get-ChildItem -Path "c:\temp" -Filter *.cs -Recurse -file | where FullName -like '*\Release\version*\*\*' | %{ 
    $Array=$_.FullName -split '\\' 
    $RankRealease=$Array.IndexOf("Release") 
    [pscustomobject]@{Release = $Array[$RankRealease+1];Location= $Array[$RankRealease+2];File = $_.Name} 
}