Показать полную графическую версию : Сравнить две даты в cmd
Solitude
24-11-2024, 21:12
Помогите с CMD скриптов по такому условию:
Сравнить 2 даты - текущую и заданную в файле статически
Если текущая дата меньше - вывести 111
Иначе вывести 222
Спасибо
Одним командным сценарием не обойтись, как вариант использовать VBScript, могут предложить и powershell:
@Echo Off
Set "date.vbs=%temp%\date.vbs"
Set "StrDate=31.12.2024"
More +8 "%~0">"%date.vbs%"
For /F %%i In ('CScript //NoLogo %date.vbs% "%StrDate%"') Do Echo.%%i
Del /F /Q "%date.vbs%"
Pause
Exit /B 0
On Error Resume Next
Function CompareDates(StrDate)
If Date() < CDate(StrDate) Then CompareDates="111" Else CompareDates="222" End If
End Function
WScript.Echo CompareDates(WScript.Arguments(0))
SQLai Lama
25-11-2024, 08:36
Начнем с того, что подразумевается под датой: это гео- локалезависимое значение, которое может быть представлено как 11.25.2024 или 2024-11-25 и т.д. было бы правильным с технической точки зрения сравнивать даты, например, с помощью PowerShell.
# две даты (в китайской и русской локали)
$zh, $ru = '2024年11月25日', '25.11.2024'
# инверторы даты (стандартного вида)
$iz, $ir = ,[DateTime]::new(0) * 2
# проверяем можем ли инвертировать даты
if ([DateTime]::TryParse($zh, [ref]$iz) -and [DateTime]::TryParse($ru, [ref]$ir)) {
# сравниваем
$iz -eq $ir
}
Предполагая, что даты всегда в одной и той же локали и имеют одинаковую форму записи, сравнение в командном языке можно свести до:
set "mydate=25.11.2024"
if %date:.=% equ %mydate:.=% (echo:111) else (echo:222)
megaloman
28-11-2024, 13:52
@Echo Off &Cls
rem Статическую дату задать в формате YYYYMMDD
Set /A StatDate=20241129
FOR /F "tokens=2 delims==." %%d In ('WMIC OS GET LOCALDATETIME /VALUE') DO Set "d=%%d"
Set /A d=%d:~0,8%
If %d% LSS %StatDate% (Echo 111) Else (Echo 222)
Pause
Exit /B
SQLai Lama
13-12-2024, 11:28
megaloman, вызов принят.
wmic os get localdatetime /value | perl -ne "/(\d{8})/ && print 20241213-$1==0?111:222"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.