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

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

Ответить
Настройки темы
CMD/BAT - [решено] Вывести 2 самых свежих файла по указаному пути

Аватара для All!@nce

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


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


Конфигурация

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


Здравствуйте. Знатоки подскажите пожалуйста как решить такую задачу. Есть папка в которую каждый день падает по одному архиву. Нужно вывести имена двух самых свежих архивов (по дате создания или изменения), а также их размеры (желательно в КБ).

Пробовал вот таким образом но почему то не работает. Выводит все файлы...
Код: Выделить весь код
@echo off
chcp 1251 >nul

pushd "\\comp1\arh"

set num=0
for /f "delims=" %%i in ('dir /b/a-d/o-d/tw') do (
echo Файл %%i изменён %%~ti размер %%~zi
set /a num+=1
if num==2 goto NEXT )
popd

:NEXT

pause
Спасибо!

Отправлено: 14:26, 07-07-2020

 

Старожил


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

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


All!@nce,
1. Выводит все файлы, т.к. в условии "if num==2" сравниваются литералы "num" и "2", которые никогда не смогут быть равными.
2. Командой "setlocal enabledelayedexpansion" необходимо установить раскрытие переменных в момент выполнения кода, а не в момент чтения кода интерпретатором. Тогда будет работать счётчик.
3. popd в вышеприведённом коде сработает только если файлов в целевом каталоге будет меньше двух.
итоговый результат
Код: Выделить весь код
@echo off
chcp 1251 >nul
setlocal enabledelayedexpansion

pushd "\\comp1\arh"

set num=0
for /f "delims=" %%i in ('dir /b/a-d/o-d/tw') do (
echo Файл %%i изменён %%~ti размер %%~zi
set /a num+=1
if !num!==2 goto NEXT
)

:NEXT

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

Отправлено: 15:13, 07-07-2020 | #2



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

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


Ветеран


Contributor


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

Профиль | Отправить 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
Я попытался выровнять как-то имена файлов по длине для лучшей наглядности. Если этого не надо, замените 2 красные строки одной
Код: Выделить весь код
	Echo Файл %~nx1 изменён %~t1 размер %~z1
Только для двух файлов
Код: Выделить весь код
@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


Аватара для All!@nce

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


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

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


iglezz, супер, просто то что нужно! Подскажите еще пожалуйста как поправить чтобы размер в КБ выводился

Отправлено: 16:24, 07-07-2020 | #4


Ветеран


Contributor


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

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


All!@nce, А какой максимальный размер файлов?

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


Отправлено: 16:35, 07-07-2020 | #5


Аватара для All!@nce

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


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

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


Цитата megaloman:
All!@nce, А какой максимальный размер файлов? »
До 20 ГБ
Сейчас у меня выводит вот так:
Код: Выделить весь код
размер 3606707190
Надо так:
Код: Выделить весь код
размер 3 606 707 КВ

Отправлено: 16:49, 07-07-2020 | #6


Ветеран


Contributor


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

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


All!@nce, Формально надо размер/1024. Но для CMD есть ограничение в 214748364.
Насколько критичен вывод именно в килобайтах. В тысячах байт не устроит?
В принципе, есть способ выкрутиться ....

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


Отправлено: 17:01, 07-07-2020 | #7


Аватара для All!@nce

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


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

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


Цитата megaloman:
В тысячах байт не устроит? »
Вполне устроит. Надо видеть примерную разницу в этих файлах.
Надо просто откинуть 3 последние цифры. Ну и разделить на группы по 3 знака (это в идеале)

Отправлено: 17:05, 07-07-2020 | #8


Ветеран


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

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


Цитата megaloman:
Формально надо размер/1024. »
нет, у топикстатера обозначение KB, а не KiB

Отправлено: 17:29, 07-07-2020 | #9


Аватара для All!@nce

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


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

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


Цитата Busla:
KB, а не KiB »
Подойдет любой вариант. Мне лишь надо видеть примерную разницу в размерах файлов. А на поделится эта цифра на 1024 или просто откинется 3 символа мне абсолютно не важно.

Отправлено: 17:36, 07-07-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Удалить 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




 
Переход