PowerShellの別のディスクにある一致する名前のファイルに複数のファイルを移動する
2つの部分に分割された巨大なトレント(1.2tb、6000以上のフォルダー)をダウンロードしていたので、2番目の部分を設計された場所に配置しました。トレントのマスターフォルダーがまさに必要なものであるため、問題はありませんでした。最初の部分のマスターフォルダーには、必要な名前ではなく、一般的なトレント名が付けられていたため、トレント名の名前を「source」に変更する代わりに、現在の一般的な名前を「source」に変更したと思います。[ファイル]タブで、すべてのファイルを選択し、右クリックしてすべてを再配置すると、bittorrentはサブフォルダーなしですべてのファイルを同じディレクトリに移動し、混乱を引き起こしました。
したがって、このトレントの未完成のバックアップがあり、ファイルが配置されているので、私のアイデアは、未完成の名前を使用し、完成したものと一致させ、完成したものを未完成の一致する名前のパスフォルダーに配置することでした。それが明確だったと思います。
PowerShellを使用してこれを解決しようとしましたが、よくわからないので、これを思いついたのですが、何も起こらず、何か問題があります。誰もが解決策を知っていますか?
$itemlistA = Get-ChildItem -Path "D:\BitTorrent\" | ForEach-Object { $objnameA = $_.Name $objPathA = $_.FullName } $itemlistB = Get-ChildItem -Path "E:\DesiredPath\" -recurse |
ForEach-Object{
$objnameB = $_.Name
$objPathB = $_.FullName
}
ForEach-Object{
if($objnameA -eq $objnameB){
Copy-Item -path $objPathA -Destination $objPathB
Write-Host "ffff Object ($objnameA) new Path ($objPathB) ffff"
}
}
回答
私があなたの意図を正しく理解している場合、あなたの目標がフラット化されたディレクトリからいくつかの(潜在的に)ネストされたディレクトリにファイルをコピーして、着信ファイルが一致する名前のファイルを上書きすることであると仮定すると、以下のスクリプトはあなたの目標を達成します。
ネストされたループのO(n ^ 2)パフォーマンスは、ソートとより効率的な検索によって改善される可能性があります。
独自の環境を反映するように、スクリプトのパラメーターを編集する必要があります。
param(
$pathToFiles = "$PSScriptRoot\BitTorrent\",
$desiredPath = "$PSScriptRoot\DesiredPath\"
)
$itemlistA = Get-ChildItem -Path $pathToFiles | Select-Object -Property Name, FullName
$itemlistB = Get-ChildItem -Path $desiredPath -Recurse | Select-Object -Property Name, FullName
foreach ($fileA in $itemlistA) {
foreach ($fileB in $itemListB) {
if ($fileB.Name -eq $fileA.Name) {
Copy-Item -path $fileA.FullName -Destination $fileB.FullName -Verbose
break
}
}
}