web-dev-qa-db-ja.com

PowerShellを使用したソースサーバーと同じディレクトリ構造内のフォルダーおよびサブフォルダー内のコピー項目ファイル

フォルダーとサブフォルダー内のファイルを適切な構造で(コピー元サーバーとして)コピーするために、以下のスクリプトを機能させるのに苦労しています。

たとえば、以下のフォルダーがあります。

メインフォルダー:ファイルaaa、ファイルbbb

サブフォルダーa:ファイル1、ファイル2、ファイル3

サブフォルダーb:ファイル4、ファイル5、ファイル6

使用されるスクリプト:

Get-ChildItem -Path \\Server1\Test -recurse | ForEach-Object {
Copy-Item -LiteralPath $_.FullName -Destination \\server2\test |
Get-Acl -Path $_.FullName | Set-Acl -Path "\\server2\test\$(Split-Path -Path $_.FullName -Leaf)"

}

出力:ファイルaaa、ファイルbbb

サブフォルダーa(空のフォルダー)

サブフォルダーb(空のフォルダー)

ファイル1、ファイル2、ファイル3、ファイル4、ファイル5、ファイル6。

ファイルをそれぞれのフォルダーにコピーしたい(ソースフォルダーのように)。それ以上のヘルプは大歓迎です。

27
user1926332

これは、Copy-Itemを使用するだけで実行できます。 Get-Childitemを使用する必要はありません。あなたはそれを考え直しているだけだと思います。

Copy-Item -Path C:\MyFolder -Destination \\Server\MyFolder -recurse -Force

私はちょうどそれをテストし、それは私のために働いた。

61
Kevin_

一度このスクリプトを見つけて、このフォルダーとファイルをコピーし、宛先でソースの同じ構造を保持し、これでいくつかの試行を行うことができます。

# Find the source files
$sourceDir="X:\sourceFolder"

# Set the target file
$targetDir="Y:\Destfolder\"
Get-ChildItem $sourceDir -Include *.* -Recurse |  foreach {

    # Remove the original  root folder
    $split = $_.Fullname  -split '\\'
    $DestFile =  $split[1..($split.Length - 1)] -join '\' 

    # Build the new  destination file path
    $DestFile = $targetDir+$DestFile

    # Move-Item won't  create the folder structure so we have to 
    # create a blank file  and then overwrite it
    $null = New-Item -Path  $DestFile -Type File -Force
    Move-Item -Path  $_.FullName -Destination $DestFile -Force
}
1
Aratan

同じコンテンツをソースからターゲットにミラーリングする場合は、次のいずれかを試してください。

function CopyFilesToFolder ($fromFolder, $toFolder) {
    $childItems = Get-ChildItem $fromFolder
    $childItems | ForEach-Object {
         Copy-Item -Path $_.FullName -Destination $toFolder -Recurse -Force
    }
}

テスト:

CopyFilesToFolder "C:\temp\q" "c:\temp\w"
0
Teoman shipahi