如何在Powershell中查找,过滤和复制目录和内容到由查找结果的一部分指定的位置

时间:2013-07-11 00:10:55

标签: file powershell directory copy

最好使用Powershell,否则使用vbscript。 perl或批次。 (无论如何这不是手工工作)。

我有一个用户个人资料列表:

\\fileserver\profiles\user1\findmedirectory\dir1
\\fileserver\profiles\user2\findmedirectory\dir1
\\fileserver\profiles\user3\notfindme\dir1

我希望将“findmedirectory”的所有实例递归复制到

\\fileserver\newprofilesdirectory\user1\
\\fileserver\newprofilesdirectory\user2\
\\fileserver\newprofilesdirectory\user3\

通过查找例如第一个条目:

\\fileserver\profiles\user1\appdata\findmedirectory\dir1
`$dest = \\fileserver\newprofiledirectory
$user = user1 (from result above)
$copydir = findmedirectory

$complete_dest = $dest & $user & $copydir (i.e. 
\\fileserver\newprofiledirectory\user1\findmedirectory )
`

在user1,user2和user3下面的两个位置都有其他文件。

到目前为止,我有: get-childitem "\\fileserver\profiles" -filter "findmedirectory" -force -recurse | where-object {$_.PSIsContainer} | select-object fullname

这有效^^。

当我尝试管道时,它会抓取“用户名”字符串,即user1。它开始分崩离析:

$files = Get-ChildItem "\\fileserver\profiles" -Filter "*findmedirectory*" -force -recurse | Where-Object {$_.PSIsContainer} | select-object fullname
foreach ($file in $files) { get-item $files.fullname).parent.name }

请帮忙。

2 个答案:

答案 0 :(得分:0)

这应该有效:

$specialdirectory = "xyz"
$Destination = "zyx"

$1 = "\\fileserver\profiles\" | Get-ChildItem
$User = $1.Name | where {$_ -Match "User"}
$User | foreach {
$check = test-path -pathtype Any "\\fileserver\profiles\$_\appdata\$Specialdirectory"
If ($check -eq $true) {Copy-Item \\fileserver\profiles\$_\appdata\$specialdirectory -Destination C:\$Destination -Recurse}
        }

答案 1 :(得分:0)

如果我理解你的问题,这样的事情应该有效:

$oldprofiles = '\\fileserver\profiles'
$newprofiles = '\\fileserver\newprofilesdirectory'

Get-ChildItem $oldprofiles -Filter "*findmedirectory*" -Recurse -Force | ? {
  $_.PSIsContainer
} | % {
  Copy-Item $_.FullName (Join-Path $newprofile $_.Parent.Name) -Recurse -Force
}