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

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

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

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


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

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


Добрый день, совсем не разбираюсь в написании скриптов, по этому прошу помощи

Как реализовать процесс проверки фалов по размеру. Если размер файла составляет меньше 500mb, после окончания проверки выводить сообщение с цифрой 0 если больше то с 1
и так же со временем, если время изменения файла больше 24 часов то выводить сообщение 0, если меньше то 1
Заранее спасибо за ответы, буду очень благодарен если напишите пояснение. Хочу разобраться в этой теме.

Отправлено: 12:17, 22-04-2021

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Powershell
Код: Выделить весь код
$file = Get-Item "D:\temp\file.txt"
if ($file.length -lt 500MB) {"0"} else {"1"}
if ($file.LastWriteTime -lt (get-date).AddDays(-1)) {"0"} else {"1"}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 12:52, 22-04-2021 | #2



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

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


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


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

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


DJ Mogarych,

Спасибо, а подскажите, реально это сделать средствами cmd ?

Отправлено: 13:01, 22-04-2021 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Наверняка, я просто не владею cmd за ненадобностью.
Может, коллеги подскажут.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:06, 22-04-2021 | #4


Ветеран


Contributor


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

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


Цитата NickTeilor:
Если размер файла составляет меньше 500mb, после окончания проверки выводить сообщение с цифрой 0 если больше то с 1 »
Если размер тестируемого файла не более 2'147'483'647 байт, то
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1 Высокий блондин в черном ботинке (1972).mp4"
	Set /A mSize=500*1024*1024

	Call :fSize %mSize% "%FileIn%" "Index"	

Echo %Index%
pause
Exit /B

:fSize
SetLocal
	Set /A i=2
	If Exist %2 Pushd "%~dp2" && (
		Set /A i=1
		For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%~2"`) Do If %%~zf LSS %1 Set /A i=0
		Popd
	)	
EndLocal &Set /A %~3=%i%
Exit /B

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

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

Отправлено: 16:37, 22-04-2021 | #5


Ветеран


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

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


Код: Выделить весь код
@echo off
set "pDir=C:\Папка"
set "file=Файл.ext"

call :# "%file%"
pause& exit

:#
  Pushd "%pDir%"
    set /a Szmb=%~z1/1024
    if %Szmb% lss 500 (echo 0) else (echo 1)
    2>nul forfiles /M "%~nx1" /D -1 && (echo 0) || (echo 1)
  Popd
exit /b
но,
Цитата NickTeilor:
больше 24 часов »
это будет не точно - "на глазок", чтобы сделать удобнее и точнее придется задействовать PowerShell и смысл тогда это делать, если весь код проще на нем сделать что и показано выше у DJ Mogarych
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:49, 22-04-2021 | #6


Ветеран


Contributor


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

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


Цитата alpap:
set /a Szmb=%~z1/1024 »
Если 500 это mb, то, ИМХО
Код: Выделить весь код
set /a Szmb=%~z1/1024/1024
???
Спасибо Alpap, я перемудрил, в моём варианте можно обойтись без For и, кроме того, без Push (файлы не более 2'147'483'647 байт
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1 Высокий блондин в черном ботинке (1972).mp4"
	Set /A mSize=500*1024*1024

	Call :fSize %mSize% "%FileIn%" "Index"	

Echo %Index%
pause
Exit /B

:fSize
If Not Exist %2 (Set /A %~3=2 &Exit /B 2)
SetLocal
	If %~z2 LSS %1 (Set /A i=0) Else (Set /A i=1)
EndLocal &Set /A %~3=%i%
Exit /B
Слегка усложнить код, файлы могут быть в 1 000 000 раз больше
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1 Высокий блондин в черном ботинке (1972).mp4"
	Set /A mSize=500*1024*1024

	Call :fSize %mSize% "%FileIn%" "Index"	

Echo %Index%
pause
Exit /B

:fSize
	If Not Exist %2 (Set /A %~3=2 &Exit /B 2)
	SetLocal
		Set "A2=%~z2"
		Call Set "A2=%%A2:~0,-6%%"

		Set /A A1=%1
		Set "A1=%A1:~0,-6%"
		If "%A1%"=="" Set /A A1=0
		If "%A2%"=="" Set /A A2=0
		Set /A i=1
		IF Not "%A2%"=="0" If %A2% LSS %A1% Set /A i=0
	EndLocal &Set /A %~3=%i%
Exit /B
Что касается времени, причём не обязательно для 24 часов, то корректно в CMD это сделать можно наверное, но будет громоздко. Как вариант (если CMD принципиален и Powershell никак не применять), можно сделать CMD со встроенным JS

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


Последний раз редактировалось megaloman, 22-04-2021 в 18:13.


Отправлено: 17:14, 22-04-2021 | #7


Ветеран


Contributor


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

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


Как вариант (если CMD принципиален и Powershell никак не применять), можно сделать CMD со встроенным JS
Код: Выделить весь код
@set @E=1; /*

@Echo Off
cls
	Set "FileIn=Z:\Box_In\1 Высокий блондин в черном ботинке (1972).mp4"
	Set /A dtFile=24*60*60
	Set /A dsFile=500*1024*1024
        
	For /f "usebackq tokens=1,2 delims= " %%a In (`Cscript //NoLogo /E:jscript "%~dpnx0" "%FileIn:\=\\%" %dsFile% %dtFile%`) Do (
		Set /A lSize=%%a
		Set /A lTime=%%b
	)

	Echo "%lSize%"  "%lTime%"
pause
GoTo :Eof
*/

var oArg = WScript.Arguments;
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
var now = new Date();

var gFile = FSO.GetFile(oArg(0));

//		WScript.Echo(gFile.Size + " < " + oArg(1));
var lSize;
if (gFile.Size < oArg(1)) lSize = 0; else lSize = 1;

//		WScript.Echo(now.getTime()/1000 - gFile.DateLastModified/1000 + " < " + oArg(2));
var lTime;
if (now.getTime()/1000 - gFile.DateLastModified/1000 < oArg(2)) lTime = 0; else lTime = 1;

WScript.Echo(lSize, lTime);
Время задавать в секундах, размер в байтах, батник сохранить в 866 кодировке.

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


Последний раз редактировалось megaloman, 22-04-2021 в 23:18.


Отправлено: 23:12, 22-04-2021 | #8


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


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

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


Огромное вам спасибо, пойду разбирать по полочкам и переваривать информацию )

Отправлено: 05:11, 23-04-2021 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - [решено] Ищу прогу для удаления одинаковых файлов по размеру klesk Программное обеспечение Windows 4 13-09-2017 11:26
VBS/WSH/JS - VBS скрипт для открытия/закрытия cd dvd привода по времени malder72 Скриптовые языки администрирования Windows 13 01-03-2017 07:49
VBS/WSH/JS - [решено] Удаление файлов по маске/размеру/времени изменения nineline Скриптовые языки администрирования Windows 6 28-05-2015 08:36
Любой язык - Скрипт для распределения файлов по папкам кучками по n-ому размеру DmitryAnatolich Скриптовые языки администрирования Windows 9 06-05-2013 15:20
CMD/BAT - Не срабатывает скрипт переноса файлов по размеру - !!! с условием переименования !!! dark-------13 Скриптовые языки администрирования Windows 0 19-03-2012 15:27




 
Переход