Powershell 使用相对路径复制文件

Powershell 使用相对路径复制文件,powershell,Powershell,我想从某个子目录复制某一类型的所有文件,并将其相对路径从该子目录复制到另一个相对路径完整的目录。e、 g: 资料来源副处长: c:\temp\sourcedirectory 源文件: c:\temp\sourcedirectory\tonymontana\fileOne.txt c:\temp\sourcedirectory\poker\fileTwo.txt 目标目录: c:\temp\targetdirectory 预期结果: c:\temp\targetdirectory\tonym

我想从某个子目录复制某一类型的所有文件,并将其相对路径从该子目录复制到另一个相对路径完整的目录。e、 g:

资料来源副处长:

c:\temp\sourcedirectory
源文件:

c:\temp\sourcedirectory\tonymontana\fileOne.txt
c:\temp\sourcedirectory\poker\fileTwo.txt
目标目录:

c:\temp\targetdirectory
预期结果:

c:\temp\targetdirectory\tonymontana\fileOne.txt
c:\temp\targetdirectory\poker\fileTwo.txt
到目前为止,我已经想到:

Set-Location $srcRoot
Get-ChildItem -Path $srcRoot -Filter $filePattern -Recurse |
    Resolve-Path -Relative |
    Copy-Item -Destination {Join-Path $buildroot $_.FullName}
然而,这个“一切都是一个对象”的超级地狱正在把我打倒(至少我是这么怀疑的)。即,文件被复制,但没有其相对路径

有谁能给我一点启发吗?

试试这个:

Copy-item $srcRoot -destination $destination -recurse

不必为此而使用PowerShell cmdlet,只需使用
robocy

robocopy C:\temp\sourcedirectory C:\temp\targetdirectory *.txt /s
您可以尝试以下方法:

$srcroot = "c:\temp\sourcedirectory"
$builroot= "c:\temp\targetdirectory"
gci -path $srcroot -filter $filepattern -recurse | 
  % { Copy-Item $_.FullName -destination ($_.FullName -replace [regex]::escape($srcroot),$builroot) }

防止复制文件夹本身,即创建

c:\temp\targetdirectory\sourcedirectory
更改为源文件夹,然后使用通配符而不是文件夹作为源:

cd C:\temp\sourcedirectory\
Copy-item * -destination c:\temp\targetdirectory -recurse`

这将在相对路径中包含实际的srcRoot,当然我可以从srcRoot迭代子目录,并根据您的建议将这些子目录与筛选器参数一起管道化。在这里,替换操作遇到了一些问题,构建目录没有预先设置,但是源代码已被删除。可能是“哦!我这边搞错了。无论如何谢谢。”有谁能给我点启发吗?-看起来微软采取了一些简单有效的措施,并将其复杂化到不再有效的程度。当开发人员不得不在线查找如何使用copy命令时,这是很悲哀的。微软在工程上的失败是多么伟大啊。@jww,你在说什么?常规复制命令不会复制具有相对路径的文件,也不会复制。这总是需要编写脚本或使用专门的工具,如
xcopy
robocy
rsync
,等等。当你只有PowerShell时,你怎么能不使用它呢?@jww请仔细阅读
robocopy
在PowerShell中的工作方式与在CMD中的工作方式相同。此类任务不需要PowerShell cmdlet。主题“使用相对路径复制”不是由使用绝对路径的答案解决的。本问答是关于如何将包含文件的文件夹结构从一个绝对路径复制到另一个绝对路径。@user1748217 OP将源目录和目标目录作为问题中的绝对路径;这个答案只是使用了这些,以便与问题相匹配。关于相对路径的部分是因为OP需要保留相对于源目录的路径。但我认为,当源目录和目标目录作为相对路径给出时,这个答案同样有效。