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}

ただし、PowerShellのこの「すべてがオブジェクト」は私を打ち負かしています(少なくともそれは私が疑うことです)。つまり、ファイルはコピーされますが、相対パスはありません。

私を少し啓発できる人はいますか?

4

4 に答える 4

9

このためにPowerShellコマンドレットを気にしないでください。単に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 に答える