使用Powershell替换将字符插入到UNC字符串中

时间:2016-07-25 23:08:26

标签: regex powershell replace unc

我们一直在将多个文件服务器迁移到整合的黑匣子解决方案中,并有理由将原始源服务器中的某些文件复制回新解决方案,因为存在从归档中调用这些文件的一些问题(即不经常使用的文件)。

我开始编写代码来识别文件

$v7Kitems = Get-ChildItem $parentpath -force | where {$_.attributes -match "Offline"} | Select FullName, DirectoryName

将信息放入数组中。 UNC的格式为\\new_server\adminshare\old_server\original_drive\original_local_directory_structure\file

我希望使用replace选项为旧文件位置创建一个新变量,然后使用Get-Item将文件重新复制,从而拉回“DirectoryName”。

Foreach($item in $v7Kitems){
    $source=$item.FullName -replace "\\\\new_server\\adminshare\\","\\" -replace "\\[E-Z]\\","\<original_drive>$\"
}

我不知道在\\[E-Z]\\的替换部分应该使用什么,因为驱动器号在服务器之间不一致。到此为止的字符串长度是一致的长度。也许我不应该使用RegEx替换,但是在驱动器号的字符编号处捕获字母的其他类型,然后将其作为变量插入替换字符串中?

Overflow的Oracle的想法是什么?

杰夫

1 个答案:

答案 0 :(得分:0)

正如Mathias在他的评论中指出的那样,您需要将驱动器号匹配放在捕获组中,这样您就可以用匹配的后向引用替换它,后跟$字符:

-replace '\\([e-z])\\','\$1$\'

请注意,您需要在替换表达式周围使用单引号,否则PowerShell会在正则表达式引擎查看替换字符串之前将$1扩展为(空)PowerShell变量。