Показать полную графическую версию : [решено] Скрипт для проверки файлов по размеру и по времени
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
@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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.