Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Sergey.l,
например с такими командами
Код: Выделить весь код
@Echo Off
cls

SetLocal EnableDelayedExpansion

CHOICE /C 123 /M "1 - Утро, 2 - Конец смены, 3 - Выйти"

If %ErrorLevel%==3 GoTo :Eof
If %ErrorLevel%==1 Call :Morning
If %ErrorLevel%==2 Call :EndDuty

pause
GoTo :Eof

:Morning
	Call :StrDate "yyyy" "mm" "dd" "hhmm"
	Call :FromNow 1 %dd%.%mm%.%yyyy% "yyyyT" "mmT" "ddT"

	2>nul md "d:\%yyyy%\%mm%\%dd%" 
	2>nul md "d:\%yyyyT%\%mmT%\%ddT%"
	Copy "d:\шаблон.doc" "d:\%yyyy%\%mm%\%dd%\%mm%_шаблон.doc"
GoTo :Eof

:EndDuty
	Call :StrDate "yyyy" "mm" "dd" "hhmm"
	Call :FromNow -1 %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY"

	2>nul Md "d:\архив\%yyyyY%\%mmY%\%ddY%"
	move /Y "d:\%yyyyY%\%mmY%\%ddY%\%mmY%_шаблон.doc" "d:\архив\%yyyyY%\%mmY%\%ddY%\"
GoTo :Eof

:StrDate
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
	Set "%~1=%@Tdate:~0,4%"
	Set "%~2=%@Tdate:~4,2%"
	Set "%~3=%@Tdate:~6,2%"
	Set "%~4=%@Tdate:~8,4%"
GoTo :Eof

:FromNow

rem Пересчет даты на заданное кол-во дней
rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd

rem Заимствовано http://forum.oszone.net/thread-186889.html
rem вызов Call :FromNow %DeltaDay% %Date% "yyyy" "mm" "dd"
rem результат в перемменной %yyyy% %mm% %dd%

 SetLocal
 Set DT=%2
 Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
 Set /A J=J+2-12*L,I=100*(N-49)+I+L
 Set /A yyyy=I,mm=100+J,dd=100+K
 EndLocal &(Set %~3=%yyyy%&Set %~4=%mm:~-2%&Set %~5=%dd:~-2%)
GoTo :Eof
%yyyy% %mm% %dd% Это Год Месяц День сегодня
%yyyyY% %mmY% %ddY% Это Год Месяц День вчера
%yyyyT% %mmT% %ddT% Это Год Месяц День завтра
Вы получили переменные Год Месяц День, используйте их так, как Вам нужно в любой комбинации.

Например, если сегодня 11 января 2018года, то:
%yyyy%-%mm%-%dd% даст значение 2018-01-11
%dd%.%mm%.%yyyy% даст значение 11.01.2018

При вызове подпрограммы Call :StrDate "yyyy" "mm" "dd" "hhmm"
получим сегодняшние %yyyy% %mm% %dd%
Переменные можно обозвать и иначе, лишь бы было соответствие "yyyy" "mm" "dd" --> %yyyy% %mm% %dd%

Call :FromNow 1 %dd%.%mm%.%yyyy% "yyyyT" "mmT" "ddT"

По сегодняшней дате %dd%.%mm%.%yyyy% (то есть 11.01.2018)
Получаем дату "завтра" (1 день вперёд от сегодня) %yyyyT% %mmT% %ddT% (то есть соответственно значения 2018 01 12)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 11-01-2018 в 23:11.


Отправлено: 23:03, 11-01-2018 | #8