Lastok
@Lastok
Network Admin

Как переформатировать время в имени файла конфига на микротике из 00:00:00 в 00-00-00?

Пишу скрипт на микротике для автоматического сохранения backup-а на FTP сервер.
Нашел в интернете скрипт. Выглядит вот так:
log info "Starting Automatic Backup Script"
:global thisdate [/system clock get date]
:global time [/system clock get time]
:global datetimestring ([:pick $thisdate 0 3] ."-" . [:pick $thisdate 4 6] ."-" . [:pick $thisdate 7 11])
:global backupfilename ([/system identity get name]."_".$datetimestring."_$time")
:local ftpusername "mikrotik"
:local ftpuserpassword "Aa1234567"
:local ftphostname "10.7.8.120"
/system backup save name="$backupfilename"
:delay 5s
/export compact file="$backupfilename"
:log info "Please wait…!!!"
:delay 5s
:log info "Sending Backup Mikrotik to FTP Server…………."
/tool fetch address="$ftphostname" src-path="$backupfilename.backup" user="$ftpusername" password="$ftpuserpassword" port=21 upload=yes mode=ftp dst-path="$backupfilename.backup"
:delay 1
/tool fetch address="$ftphostname" src-path="$backupfilename.rsc" user="$ftpusername" password="$ftpuserpassword" port=21 upload=yes mode=ftp dst-path="$backupfilename.rsc"
:delay 1
/file remove "$backupfilename.backup"
/file remove "$backupfilename.rsc"
:log info "Finished Backup Script…!!!!"

Тут есть строка с переменной _$time
:global backupfilename ([/system identity get name]."_".$datetimestring."_$time")

Суть в том что эта переменная записывает его как 00:00:00, а винда не понимает такой формат файла, тупо не допускает в имени файла символы :, как мне преобразовать эти символы в -, чтобы винда позволила мне сохранить конфиг на FTP?
  • Вопрос задан
  • 662 просмотра
Пригласить эксперта
Ответы на вопрос 3
Можно я попробую.

Сам не писал скрипты для микротика, но писал для других систем. Давайте посмотрим на строки:

1) :global thisdate [/system clock get date]
2) :global time [/system clock get time]
3) :global datetimestring ([:pick $thisdate 0 3] ."-" . [:pick $thisdate 4 6] ."-" . [:pick $thisdate 7 11])

1) Мы получаем дату и запихиваем ее в переменную в каком то виде
2) В переменную time мы просто запихиваем время в каком то виде
3) В переменную datetimestring мы ФОРМАТИРУЕМ и запихиваем дату в нужном нам виде.

Следовательно, нам нужно то же самое проделать и со временем. Что бы сделал Я =)

1) Создал переменную по типу:
:global timestring
2) обработал бы правилом, как указал товарищ выше - ([:pick $thisdate 0 3] ."-" . [:pick $thisdate 4 6] ."-" . [:pick $thisdate 7 11])

Если pick - это вырез подстроки заданного диапазона из переменной (thisdate ), то можно понять что с начала вырезается с 0 по 3 символ, объединяется с символом " - " , дальше с 4 по 6 символ из переменной , потом объединяем его с " - " , и потом берем последнюю часть с 7 по 11 символ и объединяем его с " - ".

Вроде пока понятно ??

ТОгда, ПО ВАШИМ словам , если переменная time выдает 00:00:00, где допустим ЧЧ.ММ.СС впрочем не важно, то для модификации вам надо добавить строку после time

:global timestring ([:pick $thisdate 0 1] ."-" . [:pick $thisdate 3 4] ."-" . [:pick $thisdate 6 7])

И далее поправить строку формирования имени выходного файла :

Было так -
:global backupfilename ([/system identity get name]."_".$datetimestring."_$time")

Станет так -
:global backupfilename ([/system identity get name]."_".$datetimestring."_$timestring ")

Попробуйте
Ответ написан
Moskus
@Moskus
Сами сможете переписать и применить эту функцию для ваших нужд?
:global replaceChar do={
  :for i from=0 to=([:len $1] - 1) do={
    :local char [:pick $1 $i]
    :if ($char = $2) do={
      :set $char $3
    }
    :set $output ($output . $char)
  }
  :return $output
}
Ответ написан
:global datetimestring ([:pick $thisdate 0 3] ."-" . [:pick $thisdate 4 6] ."-" . [:pick $thisdate 7 11])

Аналогично поступите с переменной со временем. Как здесь, разбивайте на более мелкие части дату(время) и подставляйте "-" где нужно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы