Войти

Показать полную графическую версию : CMD/BAT запись в текстоваый файл предыдущей даты


Technik_spat
15-07-2021, 10:25
Здравствуйте, форумчане!
В CMD/BAT скрипте, создающем текстовый файл, пытаюсь решить задачу, нужно в одну строку дважды вписать предыдущую дату в формате дд.мм.гггг через ;
С текущей датой всё легко и просто, но вот с предыдущей, в интернете много способов, но они для единичной цели, как её повторить через точку с запятой, я так и не смог себя победить((((

Elven
15-07-2021, 11:39
cmd весьма неудобен в плане получения даты (варианты есть, но они весьма громоздкие и не очень надежные), лучше использовать powershell. если невозможно полностью отказаться от cmd - то хотя бы вставку на пошике.

$dates = (Get-Date -Format dd.MM.yyyy) + ";" + ((Get-Date).AddDays(-1).ToString("dd.MM.yyyy"))

Technik_spat
15-07-2021, 12:48
cmd весьма неудобен в плане получения даты (варианты есть, но они весьма громоздкие и не очень надежные), лучше использовать powershell. если невозможно полностью отказаться от cmd - то хотя бы вставку на пошике.
Код: Выделить весь код
$dates = (Get-Date -Format dd.MM.yyyy) + ";" + ((Get-Date).AddDays(-1).ToString("dd.MM.yyyy")) »

Я бы рад, но тогда придется скрипт переделывать.
В ps я вообще никак((((
Помогите, пожалуйста, шапку сделать.
Т.е. формируется текстовый файл (пусть tmp_1.txt) в котором идет строка первая (отвечает за загрузку) $&IMPORTDATERATING@
Что бы шапка выглядила так, (т.е. саму головную часть , а остальное я тогда поставлю на дозапись в своём скрипте):
$&IMPORTDATERATING@
14.07.2021;14.07.2021;

megaloman
15-07-2021, 12:49
Technik_spat, cmd весьма неудобен в плане получения даты (варианты есть, но они весьма громоздкие »
@Echo Off
Call :FromDate -1 %Date% "Date1"
>"D:\_outfile.txt" (
Echo $^&IMPORTDATERATING@
Echo %Date1%;%Date1%;
)
Exit /B

:FromDate

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

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

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=%dd:~-2%.%mm:~-2%.%yyyy%"
GoTo :Eof

Technik_spat
15-07-2021, 13:18
megaloman»
Огромное СПАСИБО!!!!
Получилось всё))))

Elven
15-07-2021, 13:35
в переменную в cmd значение полученное в powershell можно всандалить приблизительно так (не проверял):
for /f "delims=" %%a in ('powershell ^(Get-Date -Format dd.MM.yyyy^) + ";" + ^(^(Get-Date^).AddDays^(-1^).ToString^("dd.MM.yyyy"^)^)^|Out-String') do set dates=%%a
echo %dates%

Ну или вариант предложенный megaloman, как я и писал ранее - довольно громоздко, хотя этот вариант надежен весьма, даже что-то придумать не могу как его сломать.




© OSzone.net 2001-2012