NickTeilor |
22-04-2021 12:17 2956232 |
Скрипт для проверки файлов по размеру и по времени
Добрый день, совсем не разбираюсь в написании скриптов, по этому прошу помощи
Как реализовать процесс проверки фалов по размеру. Если размер файла составляет меньше 500mb, после окончания проверки выводить сообщение с цифрой 0 если больше то с 1
и так же со временем, если время изменения файла больше 24 часов то выводить сообщение 0, если меньше то 1
Заранее спасибо за ответы, буду очень благодарен если напишите пояснение. Хочу разобраться в этой теме.
|
DJ Mogarych |
22-04-2021 12:52 2956234 |
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 2956236 |
DJ Mogarych,
Спасибо, а подскажите, реально это сделать средствами cmd ?
|
DJ Mogarych |
22-04-2021 13:06 2956237 |
Наверняка, я просто не владею cmd за ненадобностью.
Может, коллеги подскажут.
|
Цитата:
Цитата 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
|
Код:
@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
но,
это будет не точно - "на глазок", чтобы сделать удобнее и точнее придется задействовать PowerShell и смысл тогда это делать, если весь код проще на нем сделать что и показано выше у DJ Mogarych
|
Если 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
|
Как вариант (если 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 кодировке.
|
NickTeilor |
23-04-2021 05:11 2956274 |
Огромное вам спасибо, пойду разбирать по полочкам и переваривать информацию )
|
Время: 14:49.
© OSzone.net 2001-