Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - сортировка файлов по части имени

Ответить
Настройки темы
CMD/BAT - сортировка файлов по части имени

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день! Есть одна задача, имеется очень большая папка на F: с файлами в именах которых в скобках указан год (1989) (пример: Иванов Иван Иванович (1978).txt). года разные. Помогите отсортировать именно в этой папке и переместить по пяти папкам (2020-2011, 2010-2001, 2000-1991, 1990-1981, 1980-1971) на C:. Спасибо.

Отправлено: 00:37, 02-02-2023

 

Старожил


Сообщения: 245
Благодарности: 49

Профиль | Отправить PM | Цитировать


опрелеленно повершелл - на батниках писать вспотеете ( про себя употребил другое слово)
- владеете повершелл ?

Отправлено: 02:26, 02-02-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Yury197:
отсортировать именно в этой папке и переместить по пяти папкам (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}
	}
}

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:56, 02-02-2023 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить 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
}
Уберите -Whatif после проверки.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 08-02-2023 в 11:18. Причина: поправил описание

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:10, 02-02-2023 | #4


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Приветствую.
Форум вроде живой, может кто поможет.
Ситуёвина следующая - имеется куча файлов с разной длинной имени или названия, но в конце каждого год из четырех цифр.
Как можно сделать сортировку имен файлов именно по годам ?
Сколько времени потратил на поиск и начего путного не нашел.
Заранее благодарен.

Отправлено: 22:35, 07-02-2023 | #6


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата leopardden:
имеется куча файлов с разной длинной имени или названия, но в конце каждого год из четырех цифр »
Т.е. формат такой: <имя><год>.<расширение>?

PowerShell:

Код: Выделить весь код
Get-ChildItem -File | Sort-Object {$_.BaseName.Substring($_.BaseName.Length - 4)}

Последний раз редактировалось Foreigner, 08-02-2023 в 00:11.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:59, 07-02-2023 | #7


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:18, 08-02-2023 | #8


Новый участник


Сообщения: 8
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Т.е. формат такой: <имя><год>.<расширение>?
PowerShell:
Код:
Get-ChildItem -File | Sort-Object {$_.BaseName.Substring($_.BaseName.Length - 4)} »

Все верно - имя + год. расширение. У имени различная длинна, но последние 4 символа всегда год.
Не кидайтесь в меня тухлыми помидорами, но с Powershell я не знаком от слова Совсем..
Скопировал отсюда туда - все красное и с ошибками. Обьясните чайнику как это сделать.



Цитата megaloman:
@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 ? Тут еще больше красного
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:32, 08-02-2023 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Цитата leopardden:
с Powershell я не знаком »
Самое время начать знакомство, он уже 17 лет существует.
Цитата leopardden:
все красное и с ошибками »
Что красное и какие ошибки - нам надо догадаться самим.
Цитата leopardden:
А с этим что делать ? »
Это не Powershell, запускать надо в CMD.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 08:52, 08-02-2023 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - сортировка файлов по части имени

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход