CMD/BAT - Поиск самого свежего файла
-
Flyer61rus
CMD/BAT - Поиск самого свежего файла
Ребят, помогите написать 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
@echo off
for /f "delims=" %%i in ('dir C:\Files\ /B /A-D /OD /TA') do (set file=%%i)
echo %file%
pause
-
alpap
Re: CMD/BAT - Поиск самого свежего файла
Код:
.
Код: Выделить всё
@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.
-
jenia_ov
Re: CMD/BAT - Поиск самого свежего файла
Цитата 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
Спасибо, но можно как нибудь сделать без указания конкретных расширений, чтобы учитывались все возможные расширения? Или такое в бат файле сделать невозможно?
Код:
@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
CMD/BAT - Поиск самого свежего файла
Спасибо, но можно как нибудь сделать без указания конкретных расширений, чтобы учитывались все возможные расширения? Или такое в бат файле сделать невозможно?
-
megaloman
Re: CMD/BAT - Поиск самого свежего файла
Flyer61rus,
Понимаете ли, если я укажу любое расширение, то это равносильно тому - найти единственный самый свежий файл, а если есть желание перечислить все известные расширения - пожалуйста, берите из архива ниже и продолжайте список в for.
Понимаете ли, если я укажу любое расширение, то это равносильно тому - найти единственный самый свежий файл, а если есть желание перечислить все известные расширения - пожалуйста, берите из архива ниже и продолжайте список в for.
Файл 137041
-
Vasya1998
Re: CMD/BAT - Поиск самого свежего файла
Цитата alpap:
В этом, собственно, и заключался вопрос, есть ли возможность указать в бат файле выборку по всем расширениям, не перечисляя каждое из возможных.
CMD/BAT - Поиск самого свежего файла
В этом, собственно, и заключался вопрос, есть ли возможность указать в бат файле выборку по всем расширениям, не перечисляя каждое из возможных.
-
Flyer61rus
Re: CMD/BAT - Поиск самого свежего файла
Цитата Flyer61rus:
есть ли возможность указать в бат файле выборку по всем расширениям, не перечисляя каждое из возможных.
Есть - name.*, я же указал выше, но это автоматически любой файл и самый свежий один единственный, тоже написал об этом, как еще объяснить.
есть ли возможность указать в бат файле выборку по всем расширениям, не перечисляя каждое из возможных.
CMD/BAT - Поиск самого свежего файла
Есть - name.*, я же указал выше, но это автоматически любой файл и самый свежий один единственный, тоже написал об этом, как еще объяснить.
-
alpap
Re: CMD/BAT - Поиск самого свежего файла
Цитата Flyer61rus:
самый свежий файл
Переведите «самый свежий» — по дате создания, по дате последней модификации? По дате создания:
Скрытый текст
[spoiler]Код: [/spoiler]
Путь к исходной папке указывается параметром пакетного файла.
самый свежий файл
CMD/BAT - Поиск самого свежего файла
Переведите «самый свежий» — по дате создания, по дате последней модификации? По дате создания:
Скрытый текст
[spoiler]Код: [/spoiler]
Код: Выделить всё
@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 ^
exit /b 1
)
endlocal
exit /b 0Путь к исходной папке указывается параметром пакетного файла.
-
Flyer61rus
Re: CMD/BAT - Поиск самого свежего файла
Цитата Iska:
Переведите «самый свежий» — по дате создания, по дате последней модификации? По дате создания:
Скрытый текст
Вот оно, то что нужно! Спасибо Вам большое, очень выручили!
Теперь только осталось самому посидеть поразбираться, что значат каждые параметры в этом коде) Еще раз большое Вам спасибо))
Переведите «самый свежий» — по дате создания, по дате последней модификации? По дате создания:
Скрытый текст
CMD/BAT - Поиск самого свежего файла
Вот оно, то что нужно! Спасибо Вам большое, очень выручили!
Теперь только осталось самому посидеть поразбираться, что значат каждые параметры в этом коде) Еще раз большое Вам спасибо))
-
alpap
Re: CMD/BAT - Поиск самого свежего файла
Цитата Flyer61rus:
Вот оно, то что нужно!
Не совсем то. Я давно не писал и потому совершенно забыл, что ещё потребно проверять само существование папки, переданной параметром.
Цитата Flyer61rus:
что значат каждые параметры в этом коде
Если не разберётесь — спрашивайте.
Общий подход выглядит следующим образом:получаем перечень всех файлов и создаём по их расширениям переменные окружения вида «sFoundExt»;следующим шагом производим разбор всех созданных переменных окружения вида «sFoundExt», извлекая для каждой из них отсортированный по дате создания перечень файлов из той же папки, но уже с определённым расширением;имя каждого подходящего файла присваивается одной и той же переменной окружения вида «sFoundLastFileExt», таким образом, имя файла, созданного последним, будет присвоено этой переменной окружения последним, в самом конце перебора;и, наконец, производим разбор всех созданных переменных окружения вида «sFoundLastFileExt», извлекая присвоенное каждой из них найденное имя последнего файла определённого расширения.
Вот оно, то что нужно!
CMD/BAT - Поиск самого свежего файла
Не совсем то. Я давно не писал и потому совершенно забыл, что ещё потребно проверять само существование папки, переданной параметром.
Цитата Flyer61rus:
что значат каждые параметры в этом коде
CMD/BAT - Поиск самого свежего файла
Если не разберётесь — спрашивайте.
Общий подход выглядит следующим образом:получаем перечень всех файлов и создаём по их расширениям переменные окружения вида «sFoundExt»;следующим шагом производим разбор всех созданных переменных окружения вида «sFoundExt», извлекая для каждой из них отсортированный по дате создания перечень файлов из той же папки, но уже с определённым расширением;имя каждого подходящего файла присваивается одной и той же переменной окружения вида «sFoundLastFileExt», таким образом, имя файла, созданного последним, будет присвоено этой переменной окружения последним, в самом конце перебора;и, наконец, производим разбор всех созданных переменных окружения вида «sFoundLastFileExt», извлекая присвоенное каждой из них найденное имя последнего файла определённого расширения.
-
Iska
Re: CMD/BAT - Поиск самого свежего файла
Цитата Iska:
Если не разберётесь — спрашивайте.
Добрый день, Iska! Извиняюсь, что спрашиваю уже спустя столько времени, но все же поясните пожалуйста как выполняется работа в этом коде. Мне бы буквально разобрать весь ход выполнения процесса в цикле. Можно даже на примере блок-схемы.
Цитата Iska:
if defined sSourceFolder (
for %%i in ("%sSourceFolder%\*.*") do set sFoundExt%%~xi=%%~xi
Вот первый цикл. Объясните пожалуйста по шагам. Если я правильно понимаю, то если у нас существует папка, которую мы указываем через командную строку, то для всех файлов, находящихся в этой директории вводится новая переменная sFoundExt, которая... А вот что которая не понятно. Не могу разобраться что именно значит вот эта запись "sFoundExt%%~xi=%%~xi". Что за значение после равно? То что %~xi заменяет расширением имя файла %i понятно, но как это реализуется в данной строке? Почему написано через равно и почему %%, а не просто %?
Конечно, мои вопросы в некотором плане примитивны, но все же, если Вас не особо затруднит подробно рассказать о назначении и синтаксисе каждой переменной, буду очень благодарен.
Еще никак не могу разобраться с токенами. В нете почитал, но все же никак не пойму. Второй токен это значит, что в нашем случае будет выводиться %%~xi, так как находится после знака разделителя? Или что это значит?
Заранее большое спасибо Вам за ответ!
Если не разберётесь — спрашивайте.
CMD/BAT - Поиск самого свежего файла
Добрый день, Iska! Извиняюсь, что спрашиваю уже спустя столько времени, но все же поясните пожалуйста как выполняется работа в этом коде. Мне бы буквально разобрать весь ход выполнения процесса в цикле. Можно даже на примере блок-схемы.
Цитата Iska:
if defined sSourceFolder (
for %%i in ("%sSourceFolder%\*.*") do set sFoundExt%%~xi=%%~xi
CMD/BAT - Поиск самого свежего файла
Вот первый цикл. Объясните пожалуйста по шагам. Если я правильно понимаю, то если у нас существует папка, которую мы указываем через командную строку, то для всех файлов, находящихся в этой директории вводится новая переменная sFoundExt, которая... А вот что которая не понятно. Не могу разобраться что именно значит вот эта запись "sFoundExt%%~xi=%%~xi". Что за значение после равно? То что %~xi заменяет расширением имя файла %i понятно, но как это реализуется в данной строке? Почему написано через равно и почему %%, а не просто %?
Конечно, мои вопросы в некотором плане примитивны, но все же, если Вас не особо затруднит подробно рассказать о назначении и синтаксисе каждой переменной, буду очень благодарен.
Еще никак не могу разобраться с токенами. В нете почитал, но все же никак не пойму. Второй токен это значит, что в нашем случае будет выводиться %%~xi, так как находится после знака разделителя? Или что это значит?
Заранее большое спасибо Вам за ответ!