Возможно ли сделать что-то подобное на Windows? У меня есть файлы, которые были созданы на разные даты. Например:

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

Я хочу поместить каждый файл в папку, имя которой является датой создания. Например:

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

Все в одном реж.

2 ответа2

1

Я бы пошел по этому пути - вместо сравнения объектов DateTime, просто используйте метод .toshortdatestring() :

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

Он будет искать все файлы в $location , берет дату создания каждого объекта, test-path s, если папка уже существует, если нет, то она создаст ее, после этого она переместит файлы в папку.

0

Предполагая, что вы запускаете это из папки, содержащей ваши файлы,

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

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