Dynamic mikrotik动态IP到静态,带注释

Dynamic mikrotik动态IP到静态,带注释,dynamic,static,ip,mikrotik,Dynamic,Static,Ip,Mikrotik,mikrotik脚本自动将动态IP更改为静态IP,注释为日期 :local comment :local address :local mac-address { /ip dhcp-server lease :foreach a in=[find where dynamic] do={ :set dhcpip [ get $i address ]; :set mac [ get $i mac-address ]; add address=$dhcpip mac-address=$mac com

mikrotik脚本自动将动态IP更改为静态IP,注释为日期

:local comment
:local address
:local mac-address
{
/ip dhcp-server lease
:foreach a in=[find where dynamic] do={
:set dhcpip [ get $i address ];
:set mac [ get $i mac-address ];

add address=$dhcpip mac-address=$mac comment="$date";
}}

不工作哪里有问题

如果从终端运行脚本,则会收到有用的错误消息,帮助您更正自己的脚本。要运行脚本,请转到
/system script
,然后通过运行
print
获取脚本的编号。然后可以使用
run
运行脚本。您还可以从打印输出中看到脚本中突出显示的错误语法

收到的第一个错误是:

预期命令结束(第3行第11列)

这是因为变量名包含一个
-
,该字符不是变量名的有效字符-请参阅

通过简单地将变量设置为
mac
来纠正此错误,我注意到您在顶部声明的变量不是您在脚本中使用的变量,也不是您在其他地方已经使用的
mac
。这实际上是导致下一个错误的原因:

语法错误(第7行第6列)

将所有变量更新为一致后(
dhcpip
地址
a
i
),最后一个问题是
$date
没有在任何地方定义。为此,您可以在脚本的某个地方添加
:local date[/system clock get date]
。有了它,你应该能够修改你自己的脚本——我强烈建议你这样做,这样你就可以从错误中吸取教训

除了糟糕的实现之外,对脚本的一个批评是,您可以使用
makestatic
命令,而不是将其存储到变量中。以下是执行此操作的脚本:

/ip dhcp-server lease
:foreach i in=[find dynamic] do={
  make-static $i
  set $i comment=[/system clock get date]
}
如果不需要注释,则可以使用单个命令将所有动态租约设置为静态:

/ip dhcp-server lease make-static [find dynamic]