CMD/BAT - [решено] Если файл изменен более N минут назад

Ответить
Аватара пользователя
konst_vrn@vk

CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение konst_vrn@vk »

Всегда писал, не писал с датой и временем. Вернее не имею понятия как с ними работать.

в общем смысл такой





set a=10

::разница минут изменения файла и текущего времени



set file=aa.log

::файл



for /f "usebackq delims=" %%I in ('"%file%"') do set A=%%~tI

::тут вытягиваем время изменения t1 и как его представить не знаю



set D=%DATE: =0% %TIME: =0%

::тут как-то дату t



::и тут я не знаю как их сравнить по скольку не знаю как представить

if %t% GTR %t1% goto metka1

goto metka2



Нужно как-то сравнить текущую дату и время с датой, и временем изменения файла, и если разница больше %a% минут выполнить условие 1 или если меньше условие 2. Это не математические величины, поэтому я даже не представляю как это сделать.

Или подскажите как их можно может перемножить, поделить или сложить так, чтобы их можно было сравнивать, дальше я разберусь.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение megaloman »

Цитата:



::разница минут изменения файла и текущего времени



- какой диапазон изменения величины?
Аватара пользователя
konst_vrn@vk

Re: CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение konst_vrn@vk »

Цитата megaloman:



- какой диапазон изменения величины?
CMD/BAT - [решено] Если файл изменен более N минут назад




ну от 3 до 30 минут
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение Iska »

konst_vrn@vk, на форуме были примеры для работы с датой. Вы можете сами поискать, либо подождать, пока кто-нибудь, может быть, выложит ссылку или даст готовое решение. А я порекомендую для решения этой задачи перейти на WSH:



Код:

Код: Выделить всё

Option Explicit
Dim strSourceFile
Dim lngTimeDiff
Dim objFSO
strSourceFile = "E:\Песочница\0364\aa.log"
lngTimeDiff   = 10 ' минут
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strSourceFile) Then
	If DateDiff("n", objFSO.GetFile(strSourceFile).DateLastModified, Now()) > lngTimeDiff Then
		WScript.Echo "Difference more then [" & lngTimeDiff & "] minutes."
	Else
		WScript.Echo "Difference less then [" & lngTimeDiff & "] minutes."
		' Nothing to do
	End If
Else
	WScript.Echo "Source file [" & strSourceFile & "] not found."
	WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0

или PoSH:



Код:

Код: Выделить всё

$sSourceFile = "E:\Песочница\0364\aa.log"
$lTimeDiff   = 10 # минут
if(Test-Path -Path $sSourceFile -PathType Leaf) {
	if((New-TimeSpan -Start $((Get-Item -Path $sSourceFile).LastWriteTime) -End $(Get-Date)).Minutes -gt $lTimeDiff) {
		Write-Host "Difference more then [$lTimeDiff] minutes."
	} else {
		Write-Host "Difference less then [$lTimeDiff] minutes."
		# Nothing to do
	}
} else {
	Write-Host "Source file [$sSourceFile] not found." -ForegroundColor Red
}

вместо пакетных файлов.
Аватара пользователя
konst_vrn@vk

Re: CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение konst_vrn@vk »

Цитата Iska:



А я порекомендую для решения этой задачи перейти на WSH:
CMD/BAT - [решено] Если файл изменен более N минут назад




к сожалению это условие будет лишь 5% всего батника.

Вдобавок я не силен в скрипт хосте :\



Если бы кто-нибудь дал пример как сравнивать 2 даты до минут, в условии, я бы быстренько сообразил, как мне сделать.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение Iska »

Цитата konst_vrn@vk:



Если бы кто-нибудь дал пример как сравнивать 2 даты до минут, в условии, я бы быстренько сообразил, как мне сделать.
CMD/BAT - [решено] Если файл изменен более N минут назад




konst_vrn@vk, это пока Вы не увидели исходного кода пакетного файла для сравнения дат Изображение.
Аватара пользователя
konst_vrn@vk

Re: CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение konst_vrn@vk »

Цитата Iska:



это пока Вы не увидели исходного кода пакетного файла для сравнения дат .
CMD/BAT - [решено] Если файл изменен более N минут назад




Нет, как раз я видел такие файлы. Но это все не то. Все ищут если дата мешьше\больше такой-то или меньше\больше текущей. Это я все понял как работает. Приводят к виду yyyymmddhhmm и сравнивают 2 числа сответственно более ранняя дата число меньше. Так и я догадался.



У меня задача несколько иная. Мне нужно сравнить время изменения с текущим - N минут. Вроде все просто, выведи 2 числа, представь в вид, отними от второго N и сравни. Да это будет работать, но ровно до тех пор, пока время изменения не станет допустим 11:58, а текущее будет 12:00. Отнимая N-допустим равное 10 в 11:59 мы получим 1158>1159-10, а в 12:00 результат будет 1158
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение Iska »

Цитата konst_vrn@vk:



Нет, как раз я видел такие файлы. Но это все не то. Все ищут если дата мешьше\больше такой-то или меньше\больше текущей. Это я все понял как работает. Приводят к виду yyyymmddhhmm и сравнивают 2 числа сответственно более ранняя дата число меньше. Так и я догадался.
CMD/BAT - [решено] Если файл изменен более N минут назад




Значит, ещё не видели.
Аватара пользователя
konst_vrn@vk

Re: CMD/BAT - [решено] Если файл изменен более N минут назад

Сообщение konst_vrn@vk »

Чего стер сообщение?))) Главное было не батник, главное спасибо за идею как привести к математическому виду))) Я именно это спрашивал, по большей части)



Написал по своему, получается, что ему по барабану время на сколько время изменения файла отстает от текущего, но будет косяк 1 раз в год четко на новый год, в этот день величина месяца , по условию выполнения задачи, станет не больше, а меньше прошлого.

время N можно задать до 1339 минут.



В общем пользуйтесь, если кому пригодится.


Цитата:



::время разницы лога с текущим

Set N=5



::путь\имя.файла

set file=aa.log





set /a const=%N%*60



::достаем дату изменения

@echo off

for /f "usebackq delims=" %%I in ('"%file%"') do set A=%%~tI



echo %a%

set mon=%a:~3,2%

::месяц

set D=%a:~0,2%

::день

set h=%a:~11,2%

::часы

set m=%a:~14,2%

::минуты



::переводим время изменения (часы минуты) в секунды

set /a Hs=H*3600

set /a Ms=M*60

::время изменения в секундах

set /a Ts=Hs+Ms





::достаем текущую дату

@echo off

set now=%DATE: =0% %TIME: =0%

echo %now%

set mon1=%now:~3,2%

::месяц

set D1=%now:~0,2%

::день

set H1=%now:~11,2%

::часы

set M1=%now:~14,2%

::минуты



::переводим текущее время (часы минуты) в секунды

set /a Hs1=H1*3600

set /a Ms1=M1*60



::текущее время в секундах

set /a Ts1=Hs1+Ms1



::если новый месяц для времени изменения

If %mon1% GTR %mon% (set /a Mons=D*86400) else set Mons=0



::переменная времени изменения для сравнения

set /a TimeI=Ts+mons





::если новый месяц

set /a y=d+d1

If %mon1% GTR %mon% (set /a Mons1=y*86400) else set Mons1=0



::если новый день

If %D1% GTR %D% (set Ds1=86400) else set Ds1=0



::переменная текущего времени для сравнения

set /a TimeT=Ts1+Ds1+Mons1-const-TimeI

set /a mm=TimeT/60

set /a n2=mm+n

set /a n1=timet+n*60

echo ________________________________________________________________________________

echo B rpaHuLLax 1 DH9 pa3HuLLa cocTaBuJIa %n1% CEK uJIu %n2% MuHyT

echo %mm%

if %n2% GEQ %N% (echo pa3HuLLa 6oJIbwe %n% MuHyT) else echo pa3HuLLa meHbwe %n% MuHyT





pause
Ответить

Вернуться в «Скриптовые языки администрирования Windows»