Copiar com base na data da última modificação dos arquivos

1

Quero copiar da pasta de origem abaixo para o destino desejado, conforme mostrado abaixo.

Dir de origem:

--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)

cada dir acima em Dummy contém arquivos com data específica da última modificação

O diretório de destino supõe que se pareça com isto:

--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)

até agora, consultando aqui , eu consegui sair algo assim:

$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 
}

mas o código acima copia diretamente os arquivos dentro do diretório do manequim de origem que tornam o destino assim:

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

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

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

(se possível, gostaria de fazer isso usando robocopy)

    
por Z.V 28.07.2015 / 06:35

1 resposta

0

O dirA contém apenas arquivos modificados em 2015.07.02? Ou contém arquivos modificados antes disso? Na minha resposta, assumo o anterior. Também assumirei que cada pasta possui apenas arquivos ou pastas que você deseja associar à mesma pasta (ou seja, você não as moverá de sua pasta pai).

Abaixo está o código que deve funcionar. Preencha as duas primeiras variáveis.
E ei, ele usa 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
}
    
por 26.08.2015 / 07:50