1

Я хочу скопировать из исходного каталога dir нужное место назначения, как показано ниже.

Источник dir:

--Dummy
----dirA (contain files last modified 2/7/2015)
----dirB (contain files last modified 3/7/2015)
----dirC (contain files last modified 18/7/2015)
----dirD (contain files last modified 18/7/2015)
----dirE (contain files last modified 2/7/2015)

каждый dir в Dummy содержит файлы с определенной датой последнего изменения

Пункт назначения dir, предположим, выглядит следующим образом:

--Dummy2015-07-2
----dirA (contain files last modified 2/7/2015)
----dirE (contain files last modified 2/7/2015)

--Dummy2015-07-3
----dirB (contain files last modified 3/7/2015)

--Dummy2015-07-18
----dirC (contain files last modified 18/7/2015)
----dirD (contain files last modified 18/7/2015)

пока, ссылаясь здесь, мне удалось получить что-то вроде этого:

$sourcePath = 'c:/dummy'
$destPath = 'e:/dummy'  

Get-ChildItem -recurse -Path $sourcePath | Group {$_.LastWriteTime.ToString("yyyy-MM-dd")} | 
 Foreach-Object{
     $folder = New-Item -Path "$($destPath)$($_.Name)" -ItemType Directory -Force
     $_.Group | Where-Object { -not (Test-Path "$($folder.FullName)\$($_.Name)") } | Copy-Item -Destination $folder.FullName 
}

но приведенный выше код напрямую копирует файлы внутри директории исходного манекена, которые делают назначение таким образом:

--Dummy2015-07-2
----(all files from dirA & dir E)

--Dummy2015-07-3
----(all files from dirB)

--Dummy2015-07-18
----(all files from dirC & dirD)

(если возможно, хотел бы сделать это с помощью Robocopy)

1 ответ1

0

Содержит ли dirA только файлы, измененные 2015.07.02? Или он содержит файлы, измененные до этого? В своем ответе я предполагаю предшествующее. Я также предполагаю, что в каждой папке есть только файлы или папки, которые вы хотите связать с этой же папкой (т.е. вы не будете перемещать их из родительской папки).

Ниже приведен код, который должен работать. Заполните первые 2 переменные.
И эй, это использует robocopy ! :)

$PathToRootOfDummy = "C:\path\to\dummy\root"
$PathToReplacementPrefix = "C:\path\to\dummy_new-" # date goes after the '-'

Get-ChildItem $PathToRootOfDummy | Where-Object {$_.PSISContainer -eq $true} | ForEach-Object {
    $nf = "$PathToReplacementPrefix$($(Get-ChildItem -Path $PathToRootOfDummy\$($_.Name) | Where { ! $_.PSIsContainer} )[0].LastWriteTime.tostring("yyyy-MM-dd"))"
    mkdir $nf
    robocopy -s -e $PathToRootOfDummy\$_ $nf
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .