【发布时间】:2016-11-29 10:38:36
【问题描述】:
我们一直在将多个文件服务器迁移到一个整合的黑盒解决方案中,并且有理由将某些文件从原始源服务器复制回新解决方案,因为从存档中召回这些文件时出现了一些问题(即不常用的文件)。
我已经开始编写代码来识别文件
$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。
我希望使用替换选项为旧文件位置创建一个新变量,然后使用 Get-Item 将文件复制回来,因此也拉回了“DirectoryName”。
Foreach($item in $v7Kitems){
$source=$item.FullName -replace "\\\\new_server\\adminshare\\","\\" -replace "\\[E-Z]\\","\<original_drive>$\"
}
我不知道应该在 \\[E-Z]\\ 的替换部分中使用什么,因为驱动器号在服务器之间不一致。到此为止的字符串长度是一致的长度。也许我不应该使用正则表达式替换,而是使用其他类型来捕获驱动器号字符处的字母,然后将其作为变量插入到替换字符串中?
溢出神谕的想法是什么?
杰夫
【问题讨论】:
-
-replace '\\([e-z])\\','\$1$\' -
感谢您的建议。我已经尝试过更改,这会将输出更改为
\\old_server\$\original_local_directory_structure\file,它没有驱动器号。我是否应该尝试将驱动器号捕获为变量$1? -
我可能会解决我自己的问题,但
Foreach($item in $v7Kitems){ $uncsplit = $item.FullName.split("\") $drive = $uncsplit[5] $source=$item.FullName -replace "\\\\new_server\\adminshare\\","\\" -replace "\\([e-z])\\","\$drive$\" }似乎给出了正确的输出。如果路径构造是预期的且一致的,是否有任何理由不应该工作? -
输入字符串中的驱动器号在哪里?如果丢失,驱动器号只能在替换中硬编码。
-
@Geoff 您在替换表达式 (
"\$1$\") 周围使用了双引号。请再看一下 Mathias 的评论,并注意那里使用的引号。如果您要使用双引号,则需要使用反引号转义$中的$1。
标签: regex powershell replace unc