我想从某个子目录复制某个类型的所有文件,并将它们从该子目录的相对路径复制到另一个目录,并保持相对路径不变。 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的这个“一切都是一个对象”正在打败我(至少我怀疑这个)。即文件被复制,但没有相对路径。
任何可以启发我的人?
答案 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`