Показать полную графическую версию : [решено] Оператор If и дата файла
zero01001
26-09-2019, 09:43
Здравствуйте. Есть небольшой батник, который проверяет наличие файлов в папке:
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
Powershell:
if ((get-item "$filesdir\123.rar").creationtime -lt ('26.09.2019' -as [datetime])) {
echo "Старый файл"
}
else {
echo "OK"
}
megaloman
26-09-2019, 15:47
@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
%%~tf »
это дата изменения, а ТС просил:
если файл ... создан ...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
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
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, что неправда.
Возможно, я что-то не учитываю »
для ОК или не ОК пойдет, а если надо вывести хотя бы имя файла, то маловато. В данном случае при одном файле понятно что имя известно, но в моем коде для нескольких файлов производятся действия и имена уже вроде как нужны.
('26.09.2018' -as [datetime]) ? 'Новый' : 'Старый' »
greg zakharov, они таки сделали тернарный оператор?! Не прошло и…
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.