Удалить первую часть полного имени файла - PullRequest
0 голосов
/ 18 мая 2018

Это обновление от 18.05.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

Сервер \ имя_ресурсабудет отличаться для каждого пользователя: \\ECNFILE11\Joe-smith-J$, \\ECNFILE9\user2$, \\ECNFILE1\user3 и т.д ...

Спасибо

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Вы можете использовать Split-Path в цикле Do до тех пор, пока он ничего не вернет, и получить предыдущий результат, который будет последним допустимым UNC-путем, например, \\server\share.Затем Regex замените его на полное имя

$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))"
}
0 голосов
/ 18 мая 2018

Чтобы удалить \\servername\sharename$ из общего сетевого ресурса, вы можете просто взять Split('$\')[1]

Но если общий ресурс не является административным общим ресурсом (без знака $ в конце имени общего ресурса), вам необходиморазделить на '\', удалить первые 4 строки, объединить остальные с \ между каждой.

0 голосов
/ 18 мая 2018

Вы можете привести строку к URI и использовать make *, используя свойства Host и Segments, чтобы создать строку в желаемом стиле \\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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...