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

Компьютерный форум 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

 

Ветеран


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

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


Код: Выделить весь код
@echo off
for %%a in (docx txt bat) do dir/a-d/b/o-d/tc "C:\Files\*.%%a"|set/p x=^&cmd/v/c echo !x!
pause>nul
.

Отправлено: 23:45, 25-05-2016 | #2



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

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


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


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

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


Цитата alpap:
Код:
@echo off
for %%a in (docx txt bat) do dir/a-d/b/o-d/tc "C:\Files\*.%%a"|set/p x=^&cmd/v/c echo !x!
pause>nul »
Спасибо, но можно как нибудь сделать без указания конкретных расширений, чтобы учитывались все возможные расширения? Или такое в бат файле сделать невозможно?

Отправлено: 23:52, 25-05-2016 | #3


Ветеран


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

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


Flyer61rus,
Понимаете ли, если я укажу любое расширение, то это равносильно тому - найти единственный самый свежий файл, а если есть желание перечислить все известные расширения - пожалуйста, берите из архива ниже и продолжайте список в for.
Файл 137041

Последний раз редактировалось alpap, 29-10-2016 в 00:07.


Отправлено: 00:11, 26-05-2016 | #4


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


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

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


Цитата alpap:
»
В этом, собственно, и заключался вопрос, есть ли возможность указать в бат файле выборку по всем расширениям, не перечисляя каждое из возможных.

Отправлено: 00:41, 26-05-2016 | #5


Ветеран


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

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


Цитата Flyer61rus:
есть ли возможность указать в бат файле выборку по всем расширениям, не перечисляя каждое из возможных. »
Есть - name.*, я же указал выше, но это автоматически любой файл и самый свежий один единственный, тоже написал об этом, как еще объяснить.

Отправлено: 03:20, 26-05-2016 | #6


Ветеран


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

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


Цитата Flyer61rus:
самый свежий файл »
Переведите «самый свежий» — по дате создания, по дате последней модификации? По дате создания:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if defined sSourceFolder (
	for %%i in ("%sSourceFolder%\*.*") do set sFoundExt%%~xi=%%~xi
	for /f "usebackq tokens=2 delims==" %%i in (`set sFoundExt`) do for /f "usebackq delims=" %%j in (`2^>nul dir /b /a:-d /o:d /t:c "%sSourceFolder%\*%%~i"`) do set sFoundLastFileExt%%~i=%%j
	for /f "usebackq tokens=2 delims==" %%i in (`set sFoundLastFileExt`) do echo %%~i
) else (
	echo Usage: %~nx0 ^<Source folder^>
	exit /b 1
)

endlocal
exit /b 0

Путь к исходной папке указывается параметром пакетного файла.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:05, 26-05-2016 | #7


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


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

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


Цитата Iska:
Переведите «самый свежий» — по дате создания, по дате последней модификации? По дате создания:
Скрытый текст »
Вот оно, то что нужно! Спасибо Вам большое, очень выручили!
Теперь только осталось самому посидеть поразбираться, что значат каждые параметры в этом коде) Еще раз большое Вам спасибо))

Отправлено: 12:48, 26-05-2016 | #8


Ветеран


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

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


Цитата Flyer61rus:
Вот оно, то что нужно! »
Не совсем то. Я давно не писал и потому совершенно забыл, что ещё потребно проверять само существование папки, переданной параметром.

Цитата Flyer61rus:
что значат каждые параметры в этом коде »
Если не разберётесь — спрашивайте.

Общий подход выглядит следующим образом:
  • получаем перечень всех файлов и создаём по их расширениям переменные окружения вида «sFoundExt<.Расширение>»;
  • следующим шагом производим разбор всех созданных переменных окружения вида «sFoundExt<.Расширение>», извлекая для каждой из них отсортированный по дате создания перечень файлов из той же папки, но уже с определённым расширением;
  • имя каждого подходящего файла присваивается одной и той же переменной окружения вида «sFoundLastFileExt<.Расширение>», таким образом, имя файла, созданного последним, будет присвоено этой переменной окружения последним, в самом конце перебора;
  • и, наконец, производим разбор всех созданных переменных окружения вида «sFoundLastFileExt<.Расширение>», извлекая присвоенное каждой из них найденное имя последнего файла определённого расширения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:31, 28-05-2016 | #9


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


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

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


Цитата Iska:
Если не разберётесь — спрашивайте. »
Добрый день, Iska! Извиняюсь, что спрашиваю уже спустя столько времени, но все же поясните пожалуйста как выполняется работа в этом коде. Мне бы буквально разобрать весь ход выполнения процесса в цикле. Можно даже на примере блок-схемы.
Цитата Iska:
if defined sSourceFolder (
for %%i in ("%sSourceFolder%\*.*") do set sFoundExt%%~xi=%%~xi »
Вот первый цикл. Объясните пожалуйста по шагам. Если я правильно понимаю, то если у нас существует папка, которую мы указываем через командную строку, то для всех файлов, находящихся в этой директории вводится новая переменная sFoundExt, которая... А вот что которая не понятно. Не могу разобраться что именно значит вот эта запись "sFoundExt%%~xi=%%~xi". Что за значение после равно? То что %~xi заменяет расширением имя файла %i понятно, но как это реализуется в данной строке? Почему написано через равно и почему %%, а не просто %?
Конечно, мои вопросы в некотором плане примитивны, но все же, если Вас не особо затруднит подробно рассказать о назначении и синтаксисе каждой переменной, буду очень благодарен.
Еще никак не могу разобраться с токенами. В нете почитал, но все же никак не пойму. Второй токен это значит, что в нашем случае будет выводиться %%~xi, так как находится после знака разделителя? Или что это значит?
Заранее большое спасибо Вам за ответ!

Последний раз редактировалось Flyer61rus, 05-06-2016 в 17:39.


Отправлено: 14:53, 05-06-2016 | #10



Компьютерный форум 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




 
Переход