4

我想将某种类型的所有文件从某个子目录及其相对路径从该子目录复制到另一个目录,并且相对路径完好无损。例如:

源子目录:

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}

然而,这种“一切都是对象”à la PowerShell 让我失望(至少我怀疑是这样)。即文件被复制,但没有它们的相对路径。

任何人都可以启发我一点吗?

4

4 回答 4

9

不要为此烦恼 PowerShell cmdlet,只需使用robocopy

robocopy C:\temp\sourcedirectory C:\temp\targetdirectory *.txt /s
于 2013-03-25T13:33:48.950 回答
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) }
于 2013-03-25T13:36:04.027 回答
1

尝试这个:

Copy-item $srcRoot -destination $destination -recurse
于 2013-03-25T13:28:30.937 回答
0

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

c:\temp\targetdirectory\sourcedirectory

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

cd C:\temp\sourcedirectory\
Copy-item * -destination c:\temp\targetdirectory -recurse`
于 2013-11-12T23:47:30.313 回答