フォルダーとサブフォルダー内のファイルを適切な構造で(コピー元サーバーとして)コピーするために、以下のスクリプトを機能させるのに苦労しています。
たとえば、以下のフォルダーがあります。
メインフォルダー:ファイル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。
ファイルをそれぞれのフォルダーにコピーしたい(ソースフォルダーのように)。それ以上のヘルプは大歓迎です。
これは、Copy-Itemを使用するだけで実行できます。 Get-Childitemを使用する必要はありません。あなたはそれを考え直しているだけだと思います。
Copy-Item -Path C:\MyFolder -Destination \\Server\MyFolder -recurse -Force
私はちょうどそれをテストし、それは私のために働いた。
一度このスクリプトを見つけて、このフォルダーとファイルをコピーし、宛先でソースの同じ構造を保持し、これでいくつかの試行を行うことができます。
# 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
}
同じコンテンツをソースからターゲットにミラーリングする場合は、次のいずれかを試してください。
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"