Organize os arquivos por data e coloque-os em diretórios

0

É possível fazer algo assim no Windows? Eu tenho arquivos que foram criados em datas diferentes. Por exemplo:

test.txt   01.09.2015 11:56
test2.txt  04.11.2016 12:23
test3.txt  04.11.2016 12:24
.
.
.
test100.txt 02.02.2012 18:34

Eu quero colocar todos os arquivos em uma pasta cujo nome é a data de criação. Por exemplo:

move test.txt to folder "01.09.2015"
move test2.txt and test3.txt to folder "04.11.2016"
etc

Tudo está em um diretório.

    
por Defus 17.11.2016 / 14:51

2 respostas

1

Eu seguiria assim: em vez de comparar objetos DateTime, use o método .toshortdatestring() :

$location = "C:\install"
gci $location -file | % { 
    $date = $_.creationtime.toshortdatestring()
    $fullpath = "$location\$date"
    if (!(Test-Path $fullpath)) { mkdir $fullpath }
    move-item $_.FullName $fullpath -Force
}

Isso irá procurar por todos os arquivos em $location , pega a data de criação de cada objeto, test-path s se a pasta já existe, senão irá criá-la, depois disso irá mover os arquivos para a pasta .

    
por 21.11.2016 / 08:47
0

Supondo que você execute isso a partir da pasta que contém seus arquivos,

# get unique creation dates of files in the current working directory
$dates = Get-ChildItem * | Select-Object -ExpandProperty CreationTime | Get-Date -Format "MM-dd-yyyy" | Sort-Object -Unique

foreach ($date in $dates) {
    # create directories based on the date
    New-Item -ErrorAction Ignore -ItemType Directory $date
}

# get each file's creation date
$files = Get-ChildItem -File

foreach ($file in $files) {
    # get the file's creation date (the folder to move to)
    $folder = $file | Select-Object -ExpandProperty CreationTime | Get-Date -Format "MM-dd-yyyy"
    Move-Item $file $folder
}
    
por 17.11.2016 / 18:28