使用相对路径复制文件

时间:2013-03-25 13:20:27

标签: powershell

我想从某个子目录复制某个类型的所有文件,并将它们从该子目录的相对路径复制到另一个目录,并保持相对路径不变。 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}

然而,PowerShell的这个“一切都是一个对象”正在打败我(至少我怀疑这个)。即文件被复制,但没有相对路径。

任何可以启发我的人?

4 个答案:

答案 0 :(得分:4)

请勿使用PowerShell cmdlet,只需使用robocopy

robocopy C:\temp\sourcedirectory C:\temp\targetdirectory *.txt /s

答案 1 :(得分:2)

你可以试试这个:

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

答案 2 :(得分:1)

试试这个:

Copy-item $srcRoot -destination $destination -recurse

答案 3 :(得分:0)

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

c:\temp\targetdirectory\sourcedirectory

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

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