Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   CMD/BAT запись в текстоваый файл предыдущей даты (http://forum.oszone.net/showthread.php?t=349208)

Technik_spat 15-07-2021 10:25 2962174

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

Elven 15-07-2021 11:39 2962182

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 2962195

Цитата:

Цитата Elven
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 2962196

Technik_spat,
Цитата:

Цитата Elven
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 2962200

Цитата:

Цитата megaloman
megaloman»

Огромное СПАСИБО!!!!
Получилось всё))))

Elven 15-07-2021 13:35 2962202

в переменную в 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, как я и писал ранее - довольно громоздко, хотя этот вариант надежен весьма, даже что-то придумать не могу как его сломать.


Время: 07:25.

Время: 07:25.
© OSzone.net 2001-