Показать полную графическую версию : сортировка файлов по части имени
Добрый день! Есть одна задача, имеется очень большая папка на F: с файлами в именах которых в скобках указан год (1989) (пример: Иванов Иван Иванович (1978).txt). года разные. Помогите отсортировать именно в этой папке и переместить по пяти папкам (2020-2011, 2010-2001, 2000-1991, 1990-1981, 1980-1971) на C:. Спасибо.
Serguei Kouzmine
02-02-2023, 02:26
опрелеленно повершелл - на батниках писать вспотеете ( про себя употребил другое слово)
- владеете повершелл ?
отсортировать именно в этой папке и переместить по пяти папкам (2020-2011, 2010-2001, 2000-1991, 1990-1981, 1980-1971) на C: »
powershell
$fldsrc = 'F:\очень большая папка'
$dskdst = 'C:\'
$flddst = '2020-2011', '2010-2001', '2000-1991', '1990-1981', '1980-1971'
$filter = '*.txt'
$fldmd = @()
for($i=0;$i -lt $flddst.count;$i++){
$fldmd += $dskdst + $flddst[$i]
}
foreach ($item in $fldmd){
if (!(test-path $item -patht container)){$null = md $item}
}
dir $fldsrc -file -filter $filter|%{
if ($_.basename -match '(?<=\()(\d{4})(?=\))'){
$d = [int]$matches[1]
$j,$f = 0,$true
foreach ($b in $flddst){
$tmp = $b -split '-'
if ($d -ge [int]$tmp[1] -and $d -le [int]$tmp[0]){
mi $_.fullname $fldmd[$j]
$f = $false
break
}
$j++
}
if ($f){write-host $($_.fullname) - файл не перемещён -for red}
}
}
DJ Mogarych
02-02-2023, 06:10
Powershell.
Подразумевается, что папки 1980-1971 и т. д. по пути в $to созданы.
$from = "F:\temp\from"
$to = "C:\temp\to"
$files = dir "$from" -Recurse |? psiscontainer -eq $false
foreach ($file in $files) {
$year = [int]($file.basename -replace '.*\((\d{4})\).*','$1')
switch ( $year )
{
{$year -in 1971..1980} {mv $file.FullName "$to\1980-1971" -WhatIf}
{$year -in 1981..1990} {mv $file.FullName "$to\1990-1981" -WhatIf}
{$year -in 1991..2000} {mv $file.FullName "$to\2000-1991" -WhatIf}
{$year -in 2001..2010} {mv $file.FullName "$to\2010-2001" -WhatIf}
{$year -in 2011..2020} {mv $file.FullName "$to\2020-2011" -WhatIf}
}
Clear-Variable year
}
Уберите -Whatif после проверки.
megaloman
02-02-2023, 07:44
на батниках писать вспотеете »Если мерило работы не усталость, а результат, то:@Echo Off
cls
Set "BoxIn=Z:\Box_In\AllYear"
Set "BoxOut=Z:\Box_Out"
Call :MyMove 2020 2011
Call :MyMove 2010 2001
Call :MyMove 2000 1991
Call :MyMove 1990 1981
Call :MyMove 1980 1971
pause
Exit /B 0
:MyMove
If not Exist "%BoxOut%\%1-%2\" Md "%BoxOut%\%1-%2\"
For /L %%i In (%1,-1,%2) Do >nul Move "%BoxIn%\*(%%i)*.*" "%BoxOut%\%1-%2\"
Exit /BПути необходимо указать свои.
leopardden
07-02-2023, 22:35
Приветствую.
Форум вроде живой, может кто поможет.
Ситуёвина следующая - имеется куча файлов с разной длинной имени или названия, но в конце каждого год из четырех цифр.
Как можно сделать сортировку имен файлов именно по годам ?
Сколько времени потратил на поиск и начего путного не нашел.
Заранее благодарен.
Foreigner
07-02-2023, 23:59
имеется куча файлов с разной длинной имени или названия, но в конце каждого год из четырех цифр »
Т.е. формат такой: <имя><год>.<расширение>?
PowerShell:
Get-ChildItem -File | Sort-Object {$_.BaseName.Substring($_.BaseName.Length - 4)}
megaloman
08-02-2023, 00:18
@Echo Off
Set "BoxIn=Z:\Box_In\abracadabra"
Set "BoxOut=Z:\Box_Out"
For /L %%i In (2000,1,2023) Do (
If Exist "%BoxIn%\*%%i.*" 2>nul Md "%BoxOut%\%%i" &>nul Move "%BoxIn%\*%%i.*" "%BoxOut%\%%i\"
)
Exit /B
leopardden
08-02-2023, 01:32
Т.е. формат такой: <имя><год>.<расширение>?
PowerShell:
Код:
Get-ChildItem -File | Sort-Object {$_.BaseName.Substring($_.BaseName.Length - 4)} »
Все верно - имя + год. расширение. У имени различная длинна, но последние 4 символа всегда год.
Не кидайтесь в меня тухлыми помидорами, но с Powershell я не знаком от слова Совсем..
Скопировал отсюда туда - все красное и с ошибками. Обьясните чайнику как это сделать. :blush2:
@Echo Off
Set "BoxIn=Z:\Box_In\abracadabra"
Set "BoxOut=Z:\Box_Out"
For /L %%i In (2000,1,2023) Do (
If Exist "%BoxIn%\*%%i.*" 2>nul Md "%BoxOut%\%%i" &>nul Move "%BoxIn%\*%%i.*" "%BoxOut%\%%i\"
)
Exit /B »
А с этим что делать ? Тоже Powershell ? Тут еще больше красного :dont-know
DJ Mogarych
08-02-2023, 08:52
с Powershell я не знаком »
Самое время начать знакомство, он уже 17 лет существует.
все красное и с ошибками »
Что красное и какие ошибки - нам надо догадаться самим.
А с этим что делать ? »
Это не Powershell, запускать надо в CMD.
leopardden
08-02-2023, 10:55
Это не Powershell, запускать надо в CMD. »
167982
leopardden
08-02-2023, 10:57
все красное и с ошибками »
167983
leopardden
08-02-2023, 10:59
я не знаю, как выбрать конкретную папку для этих команд. Диск внешний винчестер.
DJ Mogarych
08-02-2023, 11:12
Откройте Powershell ISE, вставьте туда (в белую верхнюю часть) код, который я давал здесь - http://forum.oszone.net/post-3002243-4.html
Исправьте пути
$from = "F:\temp\from"
$to = "C:\temp\to"
F:\temp\from - папка, где лежат фотографии, которые надо отсортировать
C:\temp\to - папка, где лежат ваши 5 подпапок (2020-2011, 2010-2001, 2000-1991, 1990-1981, 1980-1971).
Запустите выполнение (кнопка play или F5). Скрипт покажет, что он будет делать с фотографиями (описание), реально пока ничего происходить не будет.
Если всё выглядит нормально, уберите из кода параметры -WhatIf и запустите код ещё раз.
Foreigner
08-02-2023, 11:33
все красное и с ошибками » »
Как вы еще живете на 7-ке, у вас старая версия PowerShell.
Обновитесь до 5.1, 7.3.2+ уже вроде не поддерживает вин-7, у .Net Core и PowerShell Core заканчивается срок действия соглашения об обратной совместимости, уже сейчас тысячи различий, так говорят разработчики.
Для того, чтобы взять только файлы в вашем случае надо проверять, файл это или директория:
pushd "E:\Some Folder"
Get-ChildItem | Where-Object { -not $_.PSisContainer } |
Sort-Object {$_.BaseName.Substring($_.BaseName.Length - 4)}
popd
Мне не ясная конечная цель сортировки, эти файлы надо просто просмотреть по порядку, скопировать или переместить куда-то?
leopardden
08-02-2023, 12:36
Обновитесь до 5.1, 7.3.2+ »
не могу обновить, не работает. Хоть и Framework обновлен. Короче ничего не получится.
Всем спасибо за ответы, зря отнял ваше время. Придется или смириться или искать какой то другой способ.
Я остаюсь на Вин 7 т.к. считаю ее лучшей ИМХО
DJ Mogarych
08-02-2023, 13:34
Придется или смириться или искать какой то другой способ »
Я вам расписал решение, в чём проблема?
megaloman
08-02-2023, 15:29
Придется или смириться или искать какой то другой способ »Я вам тоже расписал решение, в чём проблема - матчасть выучить?
Мой код надо сохранить в файл с расширением .bat и затем его запускать на выполнение.
Прилагаю к сообщению, только уберите расширение .txt, чтобы осталось .bat Set "BoxIn=Z:\Box_In\abracadabra"
Set "BoxOut=Z:\Box_Out"
Здесь пропишите Ваши пути к папкам, где находятся исходные файлы и куда помещаются папки по годам, я не в курсе, где имеется куча файлов .
leopardden
08-02-2023, 15:57
Я вам расписал решение, в чём проблема? »
проблема в том, что у меня абсолютно нет времени во всем этом разбираться. Мне нужно что-то простое и быстрое.
И кстати нашел, может кому пригодится - all my movies и еще MediaMonkey.
В обеих программах есть возможность сортировки по годам. Только что обе они платные, надо или ключи или кряки искать.
В общем, всем спасибо, вопрос закрыт :victory:
leopardden
08-02-2023, 17:42
в чём проблема - матчасть выучить? »
у меня нет на это времени. Дом, семья, работа и т.д
где находятся исходные файлы и куда помещаются папки по годам »
я не говорил, что их надо перемещать куда-то, это надо было другому человеку. Мне же просто надо было сортировку по годам.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.