Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Оператор If и дата файла (http://forum.oszone.net/showthread.php?t=342331)

zero01001 26-09-2019 09:43 2889639

Оператор If и дата файла
 
Здравствуйте. Есть небольшой батник, который проверяет наличие файлов в папке:

ECHO OFF
SET filesDIR=E:\MSSQL_BAK\ARC

if exist "%filesDIR%\123.rar" echo 123.rar - OK

if not exist "%filesDIR%\n123.rar" echo 123.rar - NE OK

Существует ли возможность, чтобы оператор проверил, дату создания 123.rar? Тобиш, если файл 123.rar создан 26.09.2019 - echo ok, если файл был изменён ранее - соответственно
Пытаюсь сделать что-то с forfiles, но пока безуспешно

DJ Mogarych 26-09-2019 09:56 2889643

Powershell:
Код:

if ((get-item "$filesdir\123.rar").creationtime -lt ('26.09.2019' -as [datetime])) {
echo "Старый файл"
}
else {
echo "OK"
}


megaloman 26-09-2019 15:47 2889706

Код:

@Echo Off
cls
        Set "iOut=Not Found"
        FOR %%f IN ("Z:\MSSQL_BAK\ARC\123.rar") DO If Exist "%%~f" Call :tFile "iOut" %Date% %%~tf
        Echo %iOut%
pause
Exit /B

:tFile
        Set "%~1=Found Old"
        If %2==%3 Set "%~1=Ok Found"       
Exit /B 0


alpap 26-09-2019 18:15 2889726

Цитата:

Цитата megaloman
%%~tf »

это дата изменения, а ТС просил:
Цитата:

Цитата zero01001
если файл ... создан ...2019 »


если по дате создания, то так:
Код:

@echo off
set "sdir=Papka"
set "sdate=20.08.2019"

for /f "tokens=1,3*" %%a in ('dir /a-d/tc "%sdir%"^|find "%sdate%"') do echo Да, файл "%%c" создан "%%a", как и задано: [%sdate%]
pause


megaloman 26-09-2019 20:07 2889736

alpap, Позвольте не согласиться :) ТС двусмысленно: если файл 123.rar создан 26.09.2019 - echo ok, если файл был изменён ранее - соответственно И, ИМХО, дата создания файла достаточно бестолковая: она может быть больше даты изменения, а для файла, особенно архива, именно дата изменения говорит об его актуальности.
Ваша идея с Find мне понравилась. Списал её у Вас в несколько извращенном виде, без For. Возможно, я что-то не учитываю ...
Код:

@Echo Off
cls
        Set "FileIn=Z:\MSSQL_BAK\ARC\123.rar"
        Set "iOut=Not Found"
        If Exist "%FileIn%" (
                Set "iOut=Found Old"
                Dir "%FileIn%" /T:W |Find "%Date%" >nul 2>&1 &&Set "iOut=OK Found"
        )
        Echo %iOut%
Pause
Exit /B 0

Здесь ключ /T:W отвечает за дату последнего изменения, но, если кому-то принципиально, можно и брать дату создания /T:C Я ориентировался на то, что интересно сравнение даты файла с сегодняшним днем. Если надо иное, заменить "%Date%" на другую дату в явном виде в формате отображения в системе.

greg zakharov 26-09-2019 20:45 2889742

DJ Mogarych, проще:
Код:

('Новый','Старый')[(gi X:path\arc.rar).CreationTime -lt ('26.09.2019' -as [datetime])]
А в pwsh 7-prev.4:
Код:

(gi X:\path\arc.rar).CreationTime -lt ('26.09.2018' -as [datetime]) ? 'Новый' : 'Старый'
Что касается командного языка, то здесь есть засада: сравниваются строки, а не даты как таковые. Чтобы не было осечек, лучше строковое представление даты конвертировать в какое-нибудь астрономическое значение (скажем JulianDay), а после уж сравнивать. Чтобы было понятно почему не стоит полагаться на сравнение строк:
Код:

if "23.08.2019" gtr "23.06.2018" echo:true
Выведет true, что неправда.

alpap 26-09-2019 21:09 2889749

Цитата:

Цитата megaloman
Возможно, я что-то не учитываю »

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

Iska 26-09-2019 23:02 2889764

Цитата:

Цитата greg zakharov
('26.09.2018' -as [datetime]) ? 'Новый' : 'Старый' »

greg zakharov, они таки сделали тернарный оператор?! Не прошло и…


Время: 23:25.

Время: 23:25.
© OSzone.net 2001-