|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - сортировка файлов по части имени |
|
|
CMD/BAT - сортировка файлов по части имени
|
Новый участник Сообщения: 2 |
Профиль | Отправить PM | Цитировать Добрый день! Есть одна задача, имеется очень большая папка на F: с файлами в именах которых в скобках указан год (1989) (пример: Иванов Иван Иванович (1978).txt). года разные. Помогите отсортировать именно в этой папке и переместить по пяти папкам (2020-2011, 2010-2001, 2000-1991, 1990-1981, 1980-1971) на C:. Спасибо.
|
|
Отправлено: 00:37, 02-02-2023 |
Старожил Сообщения: 245
|
Профиль | Отправить PM | Цитировать опрелеленно повершелл - на батниках писать вспотеете ( про себя употребил другое слово)
- владеете повершелл ? |
Отправлено: 02:26, 02-02-2023 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Yury197:
$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} } } |
|
------- Отправлено: 05:56, 02-02-2023 | #3 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать 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 } |
------- Последний раз редактировалось DJ Mogarych, 08-02-2023 в 11:18. Причина: поправил описание Отправлено: 06:10, 02-02-2023 | #4 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата Serguei Kouzmine:
@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 |
||
------- Отправлено: 07:44, 02-02-2023 | #5 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Приветствую.
Форум вроде живой, может кто поможет. Ситуёвина следующая - имеется куча файлов с разной длинной имени или названия, но в конце каждого год из четырех цифр. Как можно сделать сортировку имен файлов именно по годам ? Сколько времени потратил на поиск и начего путного не нашел. Заранее благодарен. |
Отправлено: 22:35, 07-02-2023 | #6 |
Ветеран Сообщения: 1754
|
Цитата leopardden:
PowerShell: |
|
Последний раз редактировалось Foreigner, 08-02-2023 в 00:11. Отправлено: 23:59, 07-02-2023 | #7 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 00:18, 08-02-2023 | #8 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
Все верно - имя + год. расширение. У имени различная длинна, но последние 4 символа всегда год. Не кидайтесь в меня тухлыми помидорами, но с Powershell я не знаком от слова Совсем.. Скопировал отсюда туда - все красное и с ошибками. Обьясните чайнику как это сделать. Цитата megaloman:
|
||
Отправлено: 01:32, 08-02-2023 | #9 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 08:52, 08-02-2023 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Раскладка файлов по части имени | Dyaus | Скриптовые языки администрирования Windows | 9 | 04-09-2020 16:28 | |
CMD/BAT - Поиск и сортировка файлов по части названия | registeruser1 | Скриптовые языки администрирования Windows | 4 | 04-05-2017 09:21 | |
Любой язык - Сортировка файлов по имени. | Extazik | Скриптовые языки администрирования Windows | 12 | 24-09-2015 23:26 | |
Любой язык - Поиск файлов по имени папки и сортировка | Noscripter | Скриптовые языки администрирования Windows | 1 | 23-03-2015 00:43 | |
Медиа - [решено] Сортировка файлов по номеру, имени и т.д. | medvedkovo | Microsoft Windows 7 | 2 | 19-01-2011 01:34 |
|