Войти

Показать полную графическую версию : [решено] Скрипт для проверки файлов по размеру и по времени


NickTeilor
22-04-2021, 12:17
Добрый день, совсем не разбираюсь в написании скриптов, по этому прошу помощи

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

DJ Mogarych
22-04-2021, 12:52
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"}

NickTeilor
22-04-2021, 13:01
DJ Mogarych,

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

DJ Mogarych
22-04-2021, 13:06
Наверняка, я просто не владею cmd за ненадобностью.
Может, коллеги подскажут.

megaloman
22-04-2021, 16:37
Если размер файла составляет меньше 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

alpap
22-04-2021, 16:49
@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

но,
больше 24 часов »
это будет не точно - "на глазок", чтобы сделать удобнее и точнее придется задействовать PowerShell и смысл тогда это делать, если весь код проще на нем сделать что и показано выше у DJ Mogarych

megaloman
22-04-2021, 17:14
set /a Szmb=%~z1/1024 »Если 500 это mb, то, ИМХО set /a Szmb=%~z1/1024/1024???
@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
@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, 23:12
@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 кодировке.

NickTeilor
23-04-2021, 05:11
Огромное вам спасибо, пойду разбирать по полочкам и переваривать информацию )




© OSzone.net 2001-2012