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

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

Ответить
Настройки темы
CMD/BAT - Поиск самого свежего файла

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


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

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


Ребят, помогите написать bat файл, который бы искал самый свежие файл каждого расширения в указанной директории. То есть в папке Files находится много файлов разных расширений, например .doc, .excel, .txt и т.д. и таких файлов несколько. Так вот нужно найти самый свежий файл из .doc, .excel и так по всем расширениям. Вот бат файл, который ищет просто самый свежий файл, но как сделать, чтобы искал по каждому расширению не знаю. Если кто нибудь сделает, буду очень благодарен.

@echo off
for /f "delims=" %%i in ('dir C:\Files\ /B /A-D /OD /TA') do (set file=%%i)
echo %file%
pause

Отправлено: 23:21, 25-05-2016

 

Ветеран


Contributor


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

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


Vasya1998,
Если Дата/Время файла отображается в виде ДД.ММ.ГГГГ чч:мм, то вот вариант (поиск с точностью до минуты)
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=D:\CMD_Forum"
	Set "Mask=*.*"

	Set "NFname="
	Set "DTfile="
	Set  /A NFdate=0, NFtime=0
	For /F "usebackq delims=" %%j IN (`2^>nul Dir /A:-D /B /O:-D /T:W "%BoxIn%\%Mask%"`) DO (Call :NewFile "%BoxIn%\%%j" &GoTo :Cont)
	:Cont
	For /F "usebackq delims=" %%i IN (`2^>nul Dir /A:D /S /B /O:-D /T:W "%BoxIn%"`) DO Call :DirFiles "%%i" "%Mask%"

	Echo %DTfile% %NFname% 
Pause
GoTo :Eof

:DirFiles
	For /F "usebackq delims=" %%j IN (`2^>nul Dir /A:-D /B /O:-D /T:W "%~1\%~2"`) DO (Call :NewFile "%~1\%%j" &GoTo :Eof)
GoTo :Eof

:NewFile
rem Echo %~t1 %1
	Set "Fdate=%~t1"
	Set /A Ftime=1%Fdate:~11,2%%Fdate:~14,2%
	Set /A Fdate=%Fdate:~6,4%%Fdate:~3,2%%Fdate:~0,2%
	
	If %Fdate% LSS %NFdate% GoTo :Eof
	If %Fdate% EQU %NFdate% If %Ftime% LSS %NFtime% GoTo :Eof

	Set /A NFdate=%Fdate%, NFtime=%Ftime%
	Set "NFname=%~1"
	Set "DTfile=%~t1" 		
GoTo :Eof
В указанной папке с подпапками будет найден самый последний по времени изменения файл по указанной маске - Вы не уточняли, о каких файлах идёт речь, так что путь к папке и маску файлов напишите свои

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


Последний раз редактировалось megaloman, 17-08-2018 в 09:30. Причина: Исправлена ошибка при сравнении даты/времени

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

Отправлено: 22:32, 16-08-2018 | #21



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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Vasya1998:
переписать батник таким образом, чтобы он находил последний созданный файл во вложенных папках. »
Вот поправленный батник:
Код: Выделить весь код
@echo off
set "src=C:\SourceMainDir"
set "dst=C:\DestinationDir"
for /f "delims=" %%i in ('powershell -ex bypass -c "&{(dir '%src%' -file -rec|sort -prop creationtime -desc).fullname[0]}"') do echo xcopy "%%i" "%dst%"
echo excellent!
pause&exit
в боевом применении, после do, команду echo следует удалить.

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


Последний раз редактировалось YuS_2, 17-08-2018 в 09:51. Причина: поправлено решение

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

Отправлено: 07:41, 17-08-2018 | #22


Ветеран


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

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


YuS_2, фокус не удастся: файлы по дате, конечно, сортируются, но только в пределах того каталога, в котором находятся. То есть, таким образом мы получим самый свежий файл из… «корневого» для dir каталога (если в нём нет файлов — получим самый свежий файл из первого каталога, и там нет файлов — из первого вложенного в него, нет вложенных — из второго и т.д.). Это не массив объектов и не конвеер PowerShell, увы .
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:11, 17-08-2018 | #23


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
Это не массив объектов и не конвеер PowerShell, увы »
А, да, верно, совсем упустил из вида рекурсию! Это же cmd
При рекурсивном просмотре файлов, они же выводятся вместе с путями, при этом сначала сортируются по именам каталогов в пути, что бы там в ключах ни нарисовали... казалось бы, какого фига? Но увы, это ведь cmd...
Отсюда вывод: переходите на powershell, чтобы не было так мучительно больно... и тоскливо.
Поправил исходное решение...

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


Последний раз редактировалось YuS_2, 17-08-2018 в 09:49.

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

Отправлено: 09:27, 17-08-2018 | #24


Ветеран


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

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


Цитата YuS_2:
Отсюда вывод: переходите на powershell, чтобы не было так мучительно больно... и тоскливо. »
Таки да. Я не особо люблю PowerShell, но выбора, в общем-то, и нет.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:49, 17-08-2018 | #25


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
но выбора, в общем-то, и нет »
Ну, выбор-то есть всегда (cygwin, например, а в десятке так и вообще уже и cygwin не особо нужен)... вопрос в только в том, что предпочтительнее...

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

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

Отправлено: 09:56, 17-08-2018 | #26


Ветеран


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

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


Цитата YuS_2:
cygwin, например, »
Чур меня, чур! .

Отправлено: 10:06, 17-08-2018 | #27


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


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

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


Цитата megaloman:
то вот вариант »
Спасибо, вам, большущее!
Оно работает.
Цитата YuS_2:
поправленный батник »
Оно не заработало:
xcopy "Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "file"." "C:\DestinationDir"
xcopy "строка:1 знак:32" "C:\DestinationDir"
xcopy "+ &{(dir 'C:\SourceMainDir' -file <<<< -rec|sort -prop creationtime -desc).fullname[0]}" "C:\DestinationDir"
xcopy " + CategoryInfo : InvalidArgument: ( [Get-ChildItem], ParameterBindingException" "C:\DestinationDir"
xcopy " + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand" "C:\DestinationDir"
xcopy " " "C:\DestinationDir"
Но, в любом случае, большое спасибо.

А вообще, ребята, какие же вы красавчики, что помогаете. Спасибо вам всем за то что вы есть такие добрые.

Отправлено: 10:41, 17-08-2018 | #28


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Vasya1998:
Оно не заработало »
оно работает, если powershell обновить...
ну, а если случай запущенный (WinXP), то можно так:
Код: Выделить весь код
@echo off
set "src=C:\SourceMainDir"
set "dst=C:\DestinationDir"
for /f "delims=" %%i in ('powershell -ex bypass -c "&{(dir '%src%' -rec|?{!$_.psiscontainer}|sort -prop creationtime -desc).fullname[0]}"') do echo xcopy "%%i" "%dst%"
echo excellent!
pause&exit
Но, кстати... если уж powershell на борту, то и всю задачу проще на него перевести...

Цитата Iska:
Чур меня, чур! »
таладна, чего его бояться?
вполне функционально и достаточно производительно... ну, если уж powershell совсем не в радость...

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


Последний раз редактировалось YuS_2, 17-08-2018 в 12:07.


Отправлено: 11:56, 17-08-2018 | #29


Ветеран


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

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


Цитата YuS_2:
таладна, чего его бояться?
вполне функционально и достаточно производительно... ну, если уж powershell совсем не в радость... »
Ну, ежели токмо по анекдоту — «Слышь, Вась, по-моему и до аэродрома не так уж далеко» .
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:14, 17-08-2018 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Не работает скрипт копирования самого свежего файла по текущей дате dark-------13 Скриптовые языки администрирования Windows 6 18-02-2016 08:42
CMD/BAT - Копирование самого последнего измененного файла Ua-life Скриптовые языки администрирования Windows 2 23-04-2015 18:37
CMD/BAT - [решено] Поиск и копирование самого нового файла V!RTuE Скриптовые языки администрирования Windows 1 05-02-2015 16:25
CMD/BAT - Построчная перезапись файла и отправка его на адрес почты взятый внутри самого файла JackL Скриптовые языки администрирования Windows 6 26-05-2013 12:51
CMD/BAT - [решено] Переименование файла по данным из самого файла dark-------13 Скриптовые языки администрирования Windows 11 21-04-2011 18:08




 
Переход