Powershell在路径中复制具有不同文件夹的文件

时间:2014-06-10 01:58:56

标签: powershell path wildcard

对于我对Powershell缺乏了解而道歉。语言很新。我需要将位于某个路径的一些文件复制到另一个类似的路径。例如:

C:\TEMP\Users\<username1>\Documents\<varyingfoldername>\*
C:\TEMP\Users\<username2>\Documents\<varyingfoldername>\*
C:\TEMP\Users\<username3>\Documents\<varyingfoldername>\*
C:\TEMP\Users\<username4>\Documents\<varyingfoldername>\*

等...

C:\Files\Users\<username1>\Documents\<varyingfoldername>\*
C:\Files\Users\<username2>\Documents\<varyingfoldername>\*
C:\Files\Users\<username3>\Documents\<varyingfoldername>\*
C:\Files\Users\<username4>\Documents\<varyingfoldername>\*

等...

因此,基本上所有来自路径1的文件和目录都需要被复制到每个不同路径的第二个路径。唯一已知的常量是路径的第一部分,如C:\ TEMP \ Users ......和目标的第一部分,如C:\ Files \ Users .....

我可以使用以下方法获取所有不同的路径和文件:

gci C:\TEMP\[a-z]*\Documents\[a-z]*\ 

但我不知道如何传递通配符中的内容,以便我在复制时使用它们。这里有任何帮助。

1 个答案:

答案 0 :(得分:2)

这应该有效:

Get-ChildItem "C:\TEMP\*\Documents\*" | ForEach-Object {
    $old = $_.FullName
    $new = $_.FullName.Replace("C:\TEMP\Users\","C:\Files\Users\")
    Move-Item $old $new
    }

对于匹配文件夹级别的额外复杂性,这样的事情应该有效:

Get-ChildItem "C:\TEMP\*\Documents\*" -File | ForEach-Object {
    $old = $_.FullName

    $pathArray = $old.Split("\") # Splits the path into an array
    $new = [system.String]::Join("\", $pathArray[0..1]) # Creates a starting point, in this case C:\Temp
    $new += "\" + $pathArray[4] # Appends another folder level, you can change the index to match the folder you're after
    $new += "\" + $pathArray[6] # You can repeat this line to keep matching different folders

    Copy-Item -Recurse -Force $old $new
    }