Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменение даты (месяца) в команде bat-файла

Ответить
Настройки темы
CMD/BAT - Изменение даты (месяца) в команде bat-файла

Новый участник


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

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


Через командную строку можно получить дату в формате YYYY.MM:
%date:~-4%.%date:~3,2%

Задача сделать так, чтобы дата была на один месяц меньше, т.е. не 2023.01, а 2022.12.

По гуглу нашел только откровенно сложные варианты, возможно есть более-менее простые?

Отправлено: 14:44, 02-01-2023

 

Аватара для NickM

Ветеран


Contributor


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

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


Что-то типа такого, на powershell?
Код: Выделить весь код
(Get-Date).AddDays(-(Get-Date).Day).ToString('yyyy.MM')

Отправлено: 15:40, 02-01-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Код: Выделить весь код
(Get-Date).AddMonths(-1).ToString("yyyy.MM")

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:05, 02-01-2023 | #3


Аватара для NickM

Ветеран


Contributor


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

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


Цитата DJ Mogarych:
(Get-Date).AddMonths(-1).ToString("yyyy.MM") »
Изящное решение, и ведь корректно обрабатывает кол-во дней в месяце, в том же марте-феврале.

Отправлено: 17:10, 02-01-2023 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


А я и гляжу - а что так сложно-то, может, какой подвох? Нет, обо всём уже подумали.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 17:31, 02-01-2023 | #5


Новый участник


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

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


прошу прощения, не очень знаю как использовать powershell, и весь остальной функционал реализован на bat, поэтому нужно через bat

Отправлено: 17:54, 02-01-2023 | #6


Аватара для NickM

Ветеран


Contributor


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

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


Код: Выделить весь код
for /f  %%i in ('powershell "(Get-Date).AddMonths(-1).ToString('yyyy.MM')"') do echo %%i

Отправлено: 18:49, 02-01-2023 | #7


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
	Set /A YYYYDD=%@TDate:~0,6%-1
	If "%YYYYDD:~-2%"=="00" Set /A YYYYDD-=88
	Set "YYYY.DD=%YYYYDD:~0,4%.%YYYYDD:~-2%" 

	Echo %YYYY.DD%
pause
Exit /B

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


Отправлено: 19:25, 02-01-2023 | #8


Старожил


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

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


можно посоревноваться ...

Код: Выделить весь код
@echo off
SETLOCAL
set DAYS=%1
if "%DAYS%" equ "" set DAYS=10
call :CALL_JAVASCRIPT %DAYS%
set NEW_DATE=%VALUE%

echo NEW_DATE=%NEW_DATE%
goto :EOF
:CALL_JAVASCRIPT


REM This script illustrates javascript functions. 
REM NOTE: limited size
set "SCRIPT=javascript:{"
set "SCRIPT=%SCRIPT% var o=new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);"
REM https://stackoverflow.com/questions/563406/how-to-add-days-to-date
set "SCRIPT=%SCRIPT%Date.prototype.addDays=function(x) {"
set "SCRIPT=%SCRIPT%var d=new Date(this.valueOf());"
set "SCRIPT=%SCRIPT%d.setDate(d.getDate()+x);return d};"
REM https://stackoverflow.com/questions/23593052/format-javascript-date-as-yyyy-mm-dd
set "SCRIPT=%SCRIPT%var d=new Date(Date.now());"
set "SCRIPT=%SCRIPT%var n=%~1;"
REM Locale specific
REM set "SCRIPT=%SCRIPT%o.Write(d.addDays(n).toLocaleString());"
set "SCRIPT=%SCRIPT%function p(n){var t='0'+ n.toString();return t.substring(t.length-2)}"
set "SCRIPT=%SCRIPT%function f(d){return [d.getFullYear(),p(d.getMonth()+1),p(d.getDate())].join('.')}"
set "SCRIPT=%SCRIPT%o.Write(f(d.addDays(n)));"
set "SCRIPT=%SCRIPT%close();}"
REM https://stackoverflow.com/questions/23593052/format-javascript-date-as-yyyy-mm-dd
if /i "%DEBUG%"=="true" echo mshta.exe "%SCRIPT%"
if /i "%DEBUG%"=="true" for /F "delims=" %%_ in ('mshta.exe "%SCRIPT%" 1 ^| more') do echo %%_

for /F "tokens=*" %%_ in ('mshta.exe "%SCRIPT%" 1 ^| more') do set VALUE=%%_



ENDLOCAL
exit /b
Код: Выделить весь код
.\example14.cmd 363
Код: Выделить весь код
NEW_DATE=2023.12.31

Отправлено: 04:58, 03-01-2023 | #9


Ветеран


Contributor


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

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


Serguei Kouzmine,
Цитата Serguei Kouzmine:
можно посоревноваться ... »
Я не игрок, я болельщик, выкрик с зрительной трибуны:
Чистый CMD
Код: Выделить весь код
@Echo Off
	cls

	Set "DeltaDay=362"
	Call :FromDate %DeltaDay% %Date% "yyyymmdd"
	Echo %Date%  %DeltaDay%  %yyyymmdd%

	pause
GoTo :Eof

:FromDate

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

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

 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%%mm:~-2%%dd:~-2%"
GoTo :Eof
CMD+JS
Код: Выделить весь код
@set @E=1; /*
@Echo Off
cls
	Set /A N=362
	cscript //NoLogo /E:jscript "%~dpnx0" 362
	Set /A NewDate=%ErrorLevel%
	Echo Сегодня %Date% плюс %N% = %NewDate%
pause
Exit /B

*/
var oArg = WScript.Arguments;

var Dt=new Date();                                           //Текущая дата
var DtMinus=new Date(Dt.getTime()+oArg(0)*24*60*60*1000);  //Дата, отстоящая от текущей на указ кол-во дней
var Yea=DtMinus.getFullYear(),
    Mon=DtMinus.getMonth()+1,
    Dat=DtMinus.getDate();
var StrMinus=""+Yea;
if (Mon>9) StrMinus+= Mon; else StrMinus+="0"+Mon;
if (Dat>9) StrMinus+= Dat; else StrMinus+="0"+Dat;

WScript.Quit(StrMinus);
Вообще-то надо было получить дату в виде YYYYMM, где YYYYMM - это прошлый месяц. Так что всё это из разряда: "Старый Мазай разболтался в сарае"

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


Отправлено: 14:08, 03-01-2023 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменение даты (месяца) в команде bat-файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Изменение даты в названии файла/папки Sta1917 Скриптовые языки администрирования Windows 12 07-04-2022 21:18
CMD/BAT - Изменение даты и времени создания файла timasadovykh@vk Скриптовые языки администрирования Windows 7 30-01-2021 21:37
VBS/WSH/JS - изменение даты создания файла на минус Х дней nixdorf13 Скриптовые языки администрирования Windows 2 08-06-2015 14:26
CMD/BAT - Переменные в команде задания даты osob1 Скриптовые языки администрирования Windows 1 06-05-2014 23:56
CMD/BAT - Проверка даты стандартными средствами bat файла chieffka Скриптовые языки администрирования Windows 3 29-02-2008 11:43




 
Переход