删除文件fullname的第一部分

时间:2018-05-18 13:57:19

标签: powershell

这是5/18/18的更新: 感谢所有发帖的人。每个人都分享了一些很棒的信息。一旦它最终点击了我,我就能够找到一个非常简单的使用DirectoryName的解决方案:

$file = Get-ChildItem -path "c:\temp\testc" -Recurse 
$destshare = "C:\temp\testD\"
$Dest = ($file.DirectoryName.replace($file.directoryname, $destshare))

以下原帖:

我正在使用.fullname从文件中提取Get-Childitem,并希望从源中删除 server\sharename

使用$f.fullname.split('\)[X]会保留我选择的数组部分,但有没有办法删除 \\server\share$\\ECNFILE01\santana-carlos$\)?

自:

\\ECNFILE11\Joe-smith-J$\work\O365 SOP - New User Account Creation BEANE EDITS and MARKUPS.docx

我只想:

\work\O365 SOP - New User Account Creation BEANE EDITS and MARKUPS.docx

每个用户的服务器\ sharename会有所不同:\\ECNFILE11\Joe-smith-J$\\ECNFILE9\user2$\\ECNFILE1\user3等等。

由于

3 个答案:

答案 0 :(得分:0)

您可以将字符串转换为URI,并使用HostSegments属性来构建您想要的\\server\share\样式的字符串:

$URI = [URI]"\\ECNFILE11\Joe-smith-J$\work\O365 SOP - New User Account Creation BEANE EDITS and MARKUPS.docx"
Write-Output "\\$($URI.Host)\$($URI.Segments[1])"

> \\ecnfile11\Joe-smith-J$/

Windows会在UNC路径中自动更正\/,但如果您愿意,可以随时使用替换更改此内容...

Write-Output "\\$($URI.host)\$($URI.Segments[1] -replace('/','\'))"

> \\ecnfile11\Joe-smith-J$\

返回没有\\server\share

的路径
$UNC = "\\ECNFILE11\Joe-smith-J$\work\O365 SOP - New User Account Creation BEANE EDITS and MARKUPS.docx"
$URI = [URI]$UNC
$UNC -replace "^$([regex]::Escape("\\$($URI.host)\$($URI.Segments[1] -replace('/','\'))"))"

> work\O365 SOP - New User Account Creation BEANE EDITS and MARKUPS.docx

答案 1 :(得分:0)

您可以在Do循环中使用Split-Path,直到它不返回任何内容并获取之前的结果,然后该结果将是最后一个有效的UNC路径,例如\\server\share。然后正则表达式从全名

替换它
$Files = @('\\ECNFILE11\Joe-smith-J$\work\O365 SOP - New User Account Creation BEANE EDITS and MARKUPS.docx','\\ECNFILE01\santana-carlos$\!Archive!\cotr\Task Orders\OPS\OPS-TO-09-1\OPS-TO-2009-1 Extension\OPS-TO-2009-1 MOD6\OPS-TO-2009-2 MOD6 InitiationForm.doc')
foreach ($File in $Files) {
    $PathParent = $File 
    do {
        $PreviousParent = $PathParent
        $PathParent = Split-Path $PathParent -Parent
    }
    while ($PathParent)
    $File -replace "^$([regex]::Escape(PreviousParent))"
}

答案 2 :(得分:0)

要从网络共享路径中删除\\servername\sharename$,您只需执行操作即可 Split('$\')[1]

但是,如果共享不是管理共享(共享名称末尾没有$个标志) 然后你必须按'\'拆分,删除前4行,在每个行之间加入\