|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Вывести 2 самых свежих файла по указаному пути |
|
|
CMD/BAT - [решено] Вывести 2 самых свежих файла по указаному пути
|
![]() Новый участник Сообщения: 34 |
Здравствуйте. Знатоки подскажите пожалуйста как решить такую задачу. Есть папка в которую каждый день падает по одному архиву. Нужно вывести имена двух самых свежих архивов (по дате создания или изменения), а также их размеры (желательно в КБ).
Пробовал вот таким образом но почему то не работает. Выводит все файлы... Спасибо! |
|
Отправлено: 14:26, 07-07-2020 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать All!@nce,
1. Выводит все файлы, т.к. в условии "if num==2" сравниваются литералы "num" и "2", которые никогда не смогут быть равными. 2. Командой "setlocal enabledelayedexpansion" необходимо установить раскрытие переменных в момент выполнения кода, а не в момент чтения кода интерпретатором. Тогда будет работать счётчик. 3. popd в вышеприведённом коде сработает только если файлов в целевом каталоге будет меньше двух. |
Отправлено: 15:13, 07-07-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать All!@nce,
Для произвольного числа выводимых файлов
@Echo Off
cls
>nul Chcp 1251
Set "BoxIn=\\Server\Test1"
Set "Mask=*.*"
Set /A N=2
Set /A i=%N%
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:W`) DO (
Call :OutPut "%BoxIn%\%%f" ||GoTo :End)
)
:End
pause
Exit /B
:OutPut
Set "Name= %~nx1"
Echo Файл %Name:~-25% изменён %~t1 размер %~z1
Set /A i-=1
If %i%==0 Exit /B 1
Exit /B 0
Только для двух файлов
@Echo Off cls >nul Chcp 1251 Set "BoxIn=\\Server\Test1" Set "Mask=*.*" Set "Файл1=" Set "Файл2=" Pushd "%BoxIn%" && ( FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%Mask%" /B /A:-D /O:D /T:W`) DO ( Call Set "Файл1=%%Файл2%%" Set "Файл2= %%f" Call Set "Файл2=%%Файл2:~-25%% изменён %%~tf размер %%~zf" ) Popd ) Set Файл pause Exit /B Еще вариант для сравнительно произвольного числа в произвольном порядке
@Echo Off cls >nul Chcp 1251 Set "BoxIn=\\Server\Test1" Set "Mask=*.*" Set /A i=0 Pushd "%BoxIn%" && ( FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%Mask%" /B /A:-D /O:-D /T:W`) DO ( Set /A i+=1 Set "Name= %%f" Call Set "Файл%%i%%=%%Name:~-25%% изменён %%~tf размер %%~zf" ) Popd ) Echo Файл %Файл3% Echo Файл %Файл2% Echo Файл %Файл1% pause Exit /B |
------- Последний раз редактировалось megaloman, 07-07-2020 в 16:32. Отправлено: 15:38, 07-07-2020 | #3 |
![]() Новый участник Сообщения: 34
|
Профиль | Сайт | Отправить PM | Цитировать iglezz, супер, просто то что нужно! Подскажите еще пожалуйста как поправить чтобы размер в КБ выводился
|
Отправлено: 16:24, 07-07-2020 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать All!@nce, А какой максимальный размер файлов?
|
|
------- Отправлено: 16:35, 07-07-2020 | #5 |
![]() Новый участник Сообщения: 34
|
Профиль | Сайт | Отправить PM | Цитировать Цитата megaloman:
Сейчас у меня выводит вот так: Надо так: |
|
Отправлено: 16:49, 07-07-2020 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать All!@nce, Формально надо размер/1024. Но для CMD есть ограничение в 214748364.
Насколько критичен вывод именно в килобайтах. В тысячах байт не устроит? В принципе, есть способ выкрутиться .... |
------- Отправлено: 17:01, 07-07-2020 | #7 |
![]() Новый участник Сообщения: 34
|
Профиль | Сайт | Отправить PM | Цитировать Цитата megaloman:
Надо просто откинуть 3 последние цифры. Ну и разделить на группы по 3 знака (это в идеале) |
|
Отправлено: 17:05, 07-07-2020 | #8 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 17:29, 07-07-2020 | #9 |
![]() Новый участник Сообщения: 34
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Busla:
|
|
Отправлено: 17:36, 07-07-2020 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Удалить 2 самых молодых файла по горячей клавише. | adianisa | Скриптовые языки администрирования Windows | 1 | 24-06-2016 23:19 | |
MySQL - [решено] вывести имя файла | LAKERS824 | Программирование и базы данных | 1 | 12-07-2012 09:11 | |
[решено] Копирование файла по заданному пути для разных типов ОС | foma555 | AutoIt | 9 | 30-06-2012 11:54 | |
CMD/BAT - [решено] Как завершить процесс по пути файла процесса? | navigator19 | Скриптовые языки администрирования Windows | 1 | 21-07-2010 11:54 | |
C/C++ - Создание файла, по указанному пути | S1stem | Программирование и базы данных | 1 | 01-08-2008 04:05 |
|