对于我对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]*\
但我不知道如何传递通配符中的内容,以便我在复制时使用它们。这里有任何帮助。
答案 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
}