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

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

Ответить
Настройки темы
CMD/BAT - [решено] Как отсортировать файлы?

Пользователь


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

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


У меня есть фильмы названные следующим образом: Название, год, оценка.
Код: Выделить весь код
Hannibal Rising__2007__6.2__.mp4
Hannibal__2001__6.8__.mp4
Manhunter__1986__7.2__.mp4
Red Dragon__2002__7.2__.mp4
The Silence of the Lambs__1991__8.6__.mp4
Каким образом можно отсортировать файлы по году?

Отправлено: 15:45, 15-07-2019

 

Ветеран


Contributor


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

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


Patroklos, Как понять "отсортировать"? Что в результате?
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "Mask=*__????__?.?__.mp4"

	FOR /L %%y IN (1900,1,2050) DO (
		Call Set "MMask=%%Mask:????=%%y%%
		FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D "%BoxIn%\%%MMask%%"`) DO (
			Echo %%f
	))
Pause
Exit /B

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

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

Отправлено: 18:22, 15-07-2019 | #2



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

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


Ветеран


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

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


Patroklos, в Проводнике — стандартными средствами, полагаю, никак. В скрипте WSH — так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Const adVarChar  = 200
Const adVarWChar = 202

Dim strSourceFolder

Dim objFSO
Dim objFile

Dim objRegExp
Dim objRecordSet


If WScript.Arguments.Count = 1 Then
	strSourceFolder = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(strSourceFolder) Then
		Set objRegExp = WScript.CreateObject("VBScript.RegExp")
		
		objRegExp.Pattern = "^.+__(\d{4})__\d\.\d__\.(?:avi|wmv|flv|3gp|webm|ogv|mpg|mpeg|mp4|mkv|m4v)$"
		
		With WScript.CreateObject("ADODB.RecordSet")
			With .Fields
				.Append "File name", adVarWChar, 255
				.Append "Year",      adVarChar,    4
			End With
			
			.Open()
			
			For Each objFile In objFSO.GetFolder(strSourceFolder).Files
				If objRegExp.Test(objFile.Name) Then
					.AddNew Array("File name", "Year"), Array(objFile.Name, objRegExp.Execute(objFile.Name).Item(0).Submatches.Item(0))
				End If
			Next
			
			.Sort = "Year"
			
			Do Until .EOF
				WScript.Echo .Fields.Item("File name")
				.MoveNext
			Loop
			
			.Close()
		End With
		
		Set objRegExp = Nothing
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
	WScript.Quit 1
End If

WScript.Quit 0

На PowerShell должно быть ещё проще — там можно тупо приписать новое свойство к производному классу и отсортировать по нему.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:05, 15-07-2019 | #3


Пользователь


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

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


Цитата megaloman:
Как понять "отсортировать"? Что в результате? »
Прошу прощения что непонятно написал.
В результате хочу получить список фильмов отсортированный по году. От младшего к старшему.
Код: Выделить весь код
Manhunter__1986__7.2__.mp4
The Silence of the Lambs__1991__8.6__.mp4
Hannibal__2001__6.8__.mp4
Red Dragon__2002__7.2__.mp4
Hannibal Rising__2007__6.2__.mp4
Цитата Iska:
в Проводнике — стандартными средствами, полагаю, никак. »
Как раз в проводнике это элементарно. mp4 поддерживает теги с которыми проводник хорошо работает.
Но мне удобней накостылить свой лоунчер.
Цитата Iska:
WSH »
Ужас. Я с WSH даже шапочно не знаком. Но спасибо, вот и повод познакомиться.

Отправлено: 19:35, 15-07-2019 | #4


Ветеран


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

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


Цитата Patroklos:
Как раз в проводнике это элементарно. mp4 поддерживает теги с которыми проводник хорошо работает. »
Так тэги — это тэги, про них ничего не было сказано, а у нас же в техзадании — просто часть имени файла.

Отправлено: 19:51, 15-07-2019 | #5


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Patroklos:
В результате хочу получить список фильмов отсортированный по году. »
получить где? плейлист, консоль, файл, файловый менеджер?
powershell
самый простецкий вариант:
Код: Выделить весь код
dir *.mp4|sort{$_.basename -replace '.*(\d{4}).*','$1'}

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

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

Отправлено: 20:10, 15-07-2019 | #6


Ветеран


Contributor


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

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


В результате хочу получить список фильмов отсортированный по году. От младшего к старшему.
Код: Выделить весь код
@Echo Off
cls
>nul chcp 1251
	Set "BoxIn=Z:\Box_In"
	Set "Mask=*__????__?.?__.mp4"
	Set "OutFile=Z:\Box_In\_Reestr.txt"

	>"%OutFile%" (FOR /L %%y IN (1900,1,2050) DO (
		Call Set "MMask=%%Mask:????=%%y%%
		FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D "%BoxIn%\%%MMask%%"`) DO (
			Echo %%f
	)))
Pause
Exit /B

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

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

Отправлено: 20:19, 15-07-2019 | #7


Пользователь


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

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


Цитата Iska:
Так тэги — это тэги, про них ничего не было сказано, а у нас же в техзадании — просто часть имени файла. »
Справедливо замечено. Просто я теги рассматривал в первую очередь. Для этого они и придуманы.
Цитата YuS_2:
получить где? плейлист, консоль, файл, файловый менеджер? »
Консоль. Дальше я уже сам осилю. Надеюсь.
А можно ещё сортировку по оценке?

megaloman, Спасибо большое, всё работает как надо!

Отправлено: 20:27, 15-07-2019 | #8


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Patroklos:
А можно ещё сортировку по оценке? »
по аналогии:
Код: Выделить весь код
dir *.mp4|sort {$_.basename -replace '.*_(\d\.\d)_.*','$1'}
Предполагаю следующий вопрос: "А можно ли совместить?"
- Можно
Код: Выделить весь код
dir *.mp4|sort {$_.basename -replace '.*_(\d\.\d)_.*','$1'},{$_.basename -replace '.*_(\d{4})_.*','$1'}

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

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

Отправлено: 20:45, 15-07-2019 | #9


Пользователь


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

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


Супер, спасибо! А как заставить ПоШ искать рекурсивно и при этом писать в консоль только имя и путь?
Я на сайте МС читаю хелп но он не мне не помог.
Я пишу -Recurse у меня в консоли бардак.
Я пишу -Name -Recurse он не желает искать рекурсивно.
Есть возможность совместить -Name и -Recurse ?

Отправлено: 21:04, 15-07-2019 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MSFT SQL Server - подскажите, пожалуйста, как отсортировать данные в нужном мне порядке vanoman Программирование и базы данных 0 28-04-2018 18:58
VBS/WSH/JS - [решено] скрипт: перечень сервисов и статусов, как поправить кодировку и отсортировать? andr_mozg Скриптовые языки администрирования Windows 19 24-12-2012 12:31
Разное - [решено] отсортировать файлы по типу, как в висте! Kamila Microsoft Windows 7 5 14-10-2009 23:12
Как отсортировать одинаковые файлы? Evita Хочу все знать 3 25-08-2005 18:37
Как отсортировать улицы на FoxPro Liana111 Программирование и базы данных 2 26-04-2004 08:20




 
Переход