powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Windows [игнор отключен] [закрыт для гостей] / как получит вчерашнее число в бат файле
14 сообщений из 14, страница 1 из 1
как получит вчерашнее число в бат файле
    #34618744
erny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как получит вчерашнее число в бат файле
%date% выводит сегодняшнее
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34618977
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть 2 варианта

1. Исп. JScript или VB сценарий ( см. что такое Windows Scripting Host )

файл yesterday.js
Код: plaintext
1.
2.
3.
4.
5.
var today = new Date(); 
var yesterdayDate = new Date(); 
yesterdayDate.setDate( today.getDate() - 1  );
WScript.echo("Today       : " + today.toString() + 
 "\nYesterday : " + yesterdayDate.toString());

однако тогда имеет смысл все на wsh и писать, но зато это вариант обойтись штатными виндовыми средствами

2. Использовать порт unix-овых утилит, можно взять здесь UnxUtils.zip
тогда батник можно оформить следующим образом
Код: plaintext
1.
2.
3.
echo off
for /f %%i in ('C:\UnxUtils\usr\local\wbin\date.exe -d "1 day ago" +%%Y.%%m.%%d') do set YESTERDAY=%%i
echo Yesterday is %YESTERDAY%
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34619355
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно именно в bat-файле, то можно разложить дату на составные части и отнять один день, потом делать цепь проверок.
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34619595
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот накропал.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
rem echo off
setlocal enabledelayedexpansion

rem set dt= 01 . 02 . 2008 
rem Работает при условии, что %date% распарсится в виде dd.mm.yyyy
rem Если распарсивается в другом виде, то надо поиграть с разбивкой даты на день, месяц, год
rem Разбивку вообще то можно сделать через for и указать разделитель, тогда можно 
rem наплевать на количество цифр в дне/месяце
set dt=%date%
set /A d=%dt:~, 2 %- 1 
if !d!== 0  (
rem Если надо получить последний день предыдущего месяца
  set /A m=%dt:~ 3 , 2 %- 1 
  set y=%dt:~ 6 %
  call :setlastm
) else (
rem Если мы в том же месяце остались после вычитания дня
  set m=%dt:~ 3 , 2 %
  set y=%dt:~ 6 %
)

rem Дописать ноль слева от числа 
set /A x=d/ 10 
if !x!== 0  set d= 0 !d!

rem Дописать ноль слева от месяца
set /A x=m/ 10 
if !x!== 0  set m= 0 !m!

rem Выводим на экран полученную дату
echo %d%.%m%.%y%
rem Выход из скрипта
exit

rem Это типа процедура у нас тут
rem Если надо открутить месяц
:setlastm
if !m!== 0  (
rem Если надо открутить год
  set m= 12 
  set /A y=y- 1 
) 
rem теперь надо получить последний день месяца
if !m!== 1  set d= 31 
if !m!== 2  call :setfeb
if !m!== 3  set d= 31 
if !m!== 4  set d= 30 
if !m!== 5  set d= 31 
if !m!== 6  set d= 30 
if !m!== 7  set d= 31 
if !m!== 8  set d= 31 
if !m!== 9  set d= 30 
if !m!== 10  set d= 31 
if !m!== 11  set d= 30 
if !m!== 12  set d= 31 
rem Выход из "процедуры"
exit /b

rem Это типа еще одна процедура 
rem С февралем траблы
:setfeb
rem найдем остаток от деления года на  4 , чтобы определить високосность года
rem Не рассматриваем случай с високосностью, которая попадает на смену столетия (лениво)
set /A vy=y %%  4 
if !vy!== 0  (
  set d= 29 
) else (
  set d= 28 
)
rem Выход из "процедуры"
exit /b

А вообще это изврат :)
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34619635
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибочка
вместо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if !d!== 0  (
rem Если надо получить последний день предыдущего месяца
  set /A m=%dt:~ 3 , 2 %- 1 
  set y=%dt:~ 6 %
  call :setlastm
) else (
rem Если мы в том же месяце остались после вычитания дня
  set m=%dt:~ 3 , 2 %
  set y=%dt:~ 6 %
)
надо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
rem Если надо получить последний день предыдущего месяца
  set /A m=%dt:~ 3 , 2 %- 1 
  set y=%dt:~ 6 %
  call :setlastm
) else (
rem Если мы в том же месяце остались после вычитания дня
  set /A m=%dt:~ 3 , 2 %- 0 
  set y=%dt:~ 6 %
)
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34619640
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, строчку потерял...
так вот там надо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if !d!== 0  (
rem Если надо получить последний день предыдущего месяца
  set /A m=%dt:~ 3 , 2 %- 1 
  set y=%dt:~ 6 %
  call :setlastm
) else (
rem Если мы в том же месяце остались после вычитания дня
  set /A m=%dt:~ 3 , 2 %- 0 
  set y=%dt:~ 6 %
)
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34620178
erny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое за помощь
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34621487
erny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to imkot
подскажите есть какоето описание синтаксиса который Вы используете, а то я немогу ничего найти в интернете, а нужно еще парочку скриптов написать
если у Вас есть скиньте пожалуста на 777fox@mail.ru
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34621734
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В командной строке наберите
Код: plaintext
1.
2.
help set
help if
help for
и получите полное описание на экране, а
Код: plaintext
help if > if.txt

позволит сохранить описание в текстовом файле.
Верно по крайней мере для Win2k и WinXP.
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #34621739
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ernyto imkot
подскажите есть какоето описание синтаксиса который Вы используете, а то я немогу ничего найти в интернете, а нужно еще парочку скриптов написать
если у Вас есть скиньте пожалуста на 777fox@mail.ru
Советую почитать вот эту статью . В ней ничего такого, но очень помогает разобраться с командным интерпретатором win2000/Xp
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как получит вчерашнее число в бат файле
    #39078184
okaraulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
коряво но просто:

tzutil /s "Dateline Standard Time"
for /f "tokens=1-3 delims=./-" %%f in ("%date%") do set dt=%%h.%%g.%%f
tzutil /s "Russian Standard Time"
echo %dt%

в верхнем tzutil ставишь временную зону которая гарантирована будет вчерашней относительно времени запуска батника, а в нижнем возвращаешь к своей.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как получит вчерашнее число в бат файле
    #39481349
ReaMas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я сделал такой вариант, мне он больше нравится:


set Day=%date:~7,2%
set Month=%date:~4,2%
set Year=%date:~10,4%
set /A OldYear=%Year%-1
set /A IntercalaryYear=%Year%/4*4

if %Day%==01 (

if %Month%==01 (
set PreviousDate=%OldYear%1231
goto Found
)

if %Month%==02 (
set PreviousDate=%Year%0131
goto Found
)

if %Month%==03 (
if %Year%==%IntercalaryYear% (
set PreviousDate=%Year%0229
goto Found
)
set PreviousDate=%Year%0228
goto Found
)

if %Month%==04 (
set PreviousDate=%Year%0331
goto Found
)

if %Month%==05 (
set PreviousDate=%Year%0430
goto Found
)

if %Month%==06 (
set PreviousDate=%Year%0531
goto Found
)

if %Month%==07 (
set PreviousDate=%Year%0630
goto Found
)

if %Month%==08 (
set PreviousDate=%Year%0731
goto Found
)

if %Month%==09 (
set PreviousDate=%Year%0831
goto Found
)

if %Month%==10 (
set PreviousDate=%Year%0930
goto Found
)

if %Month%==11 (
set PreviousDate=%Year%1031
goto Found
)

if %Month%==12 (
set PreviousDate=%Year%1130
goto Found
)

)

set /A Yesterday=%Day%-1
set /A OneDigit=Yesterday/10
if %OneDigit%==0 set Yesterday=0%Yesterday%
set PreviousDate=%Year%%Month%%Yesterday%

:Found
echo %PreviousDate%
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #39481395
ReaMas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В качестве исходных данных взята дата в западном формате: "день недели", "месяц", "число", "год".
...
Рейтинг: 0 / 0
как получит вчерашнее число в бат файле
    #39485197
ReaMas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо в указанном мной коде поменять:

set /A Yesterday=%Day%-1
set /A OneDigit=Yesterday/10
if %OneDigit%==0 set Yesterday=0%Yesterday%
set PreviousDate=%Year%%Month%%Yesterday%

на это:

set /A CalculatePreviousDay=1%Day%-1
set Yesterday=%CalculatePreviousDay:~1,2%
set PreviousDate=%Year%%Month%%Yesterday%

иначе будут проблемы на числах 08 и 09, так как команда SET считает число, начинающееся на ноль, числом в восьмеричной системе счисления.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Windows [игнор отключен] [закрыт для гостей] / как получит вчерашнее число в бат файле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]