autohotkey搜索并替换文本文件中的多个变量

时间:2017-02-17 23:21:10

标签: loops scripting automation autohotkey

非常感谢任何帮助。

我有一个专门的配置表,用于配置具有大约20个不同变量的路由器。我最终使用Notepad ++和Autohotkey进行搜索和替换。

我将列出一个简短的清单,因为它会说明问题。

在我的配置表中,我想在其中搜索并替换这些变量,文件中列出这些变量,以创建更多的Autohotkey脚本来创建标签,配置更新和电子邮件。

  

工作单
  srwnumber
  新设备
  旧设备
  老毂
  新的资产
  新串行

我想弄清楚的是有一段代码可以遍历列表并替换搜索和替换变量。

我不知道如何正确地进行数组和循环,但我这样做的想法是这样的 用于搜索和替换的变量列表 因此收件箱变量将是一个变量,问题也是如此。然后我可以在变量更新的同时循环遍历问题。

这样我就可以随时添加和删除变量,而无需拥有庞大的硬编码列表。

::ncvorep::
SetKeyDelay, 75,75
null := ""
inputbox,  variable1v, variable2v
If %variable1v% <> %null%
  {
        send ^h
        send Workorder{tab}{+tab}
        send Workorder{space}%variable1v%
        send !a
      }
      ; this blanks out the variable if the variable1v is blank.
    else if workorderv = %null%
  {     send ^h
        send workorder {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
}

更多信息。

::ncvorep::
SetKeyDelay, 75,75
null := ""
inputbox,  workorderv, Enter Work Order #
If workorderv <> %null%
  {
        send ^h
        send workorder{tab}{+tab}
        send workorder{space}%workorderv%
        send !a
      }

    else if workorderv = %null%
  {     send ^h
        send workorder {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
} 

我必须创建这样的东西,以便与Notepad ++一起使用来搜索和替换以完成它。

;Last update  Tue, Feb 14, 2017 15 18  03:18:47 PM
#SingleInstance force
#Warn
; template to setup cvo search and replace segment.



::ncvorep::
SetKeyDelay, 75,75
null := ""
inputbox,  workorderv, Enter Work Order #
If workorderv <> %null%
  {
        send ^h
        send workorder{tab}{+tab}
        send workorder{space}%workorderv%
        send !a
      }

    else if workorderv = %null%
  {     send ^h
        send workorder {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
}
null := ""
inputbox,  srwnumberv, Enter Service Order #
If srwnumberv <> %null%
  {
        send ^h
        send srwnumber{tab}{+tab}
        send srwnumber{space}%srwnumberv%
        send !a
      }

    else if srwnumberv = %null%
  {     send ^h
        send srwnumber {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
}
null := ""
inputbox,  new-devicev, Enter New Device Name #
If new-devicev <> %null%
  {
        send ^h
        send new-device{tab}{+tab}
        send new-device{space}%new-devicev%
        send !a
      }

    else if new-devicev = %null%
  {     send ^h
        send new-device {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
}

null := ""
inputbox,  old-devicev, Enter Old Device Name #
If old-devicev <> %null%
  {
        send ^h
        send old-device{tab}{+tab}
        send old-device{space}%old-devicev%
        send !a
      }

    else if old-devicev = %null%
  {     send ^h
        send old-device {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
}
null := ""
inputbox,  old-hubv, Enter Old Connecting Device #
If old-hubv <> %null%
  {
        send ^h
        send old-hub{tab}{+tab}
        send old-hub{space}%old-hubv%
        send !a
      }

    else if old-hubv = %null%
  {     send ^h
        send old-hub {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
}
null := ""
inputbox,  new-assetv, Enter New Asset #
If new-assetv <> %null%
  {
        send ^h
        send new-asset{tab}{+tab}
        send new-asset{space}%new-assetv%
        send !a
      }

    else if new-assetv = %null%
  {     send ^h
        send new-asset {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
}
null := ""
inputbox,  new-serialv, Enter New Serial Number #
If new-serialv <> %null%
  {
        send ^h
        send new-serial{tab}{+tab}
        send new-serial{space}%new-serialv%
        send !a
      }

    else if new-serialv = %null%
  {     send ^h
        send new-serial {tab}{+tab}
        send ^a
        send {backspace}
        send !a
Exit
}
return

1 个答案:

答案 0 :(得分:0)

假设我理解这个问题,下面的解决方案可能更合适。基本上它会复制到剪贴板中,无论文本在最前面的窗口中是什么,迭代字典并将匹配的键替换为它们的值,然后将修改后的内容粘贴回来。

警告: 如果文档太大,复制到剪贴板可能会在旧系统上遇到一些性能问题。

F11::
{
Send, ^a
Send, ^c
replace := {"workorder":"not_workorder","srwnumber":"not_srwnumber","new-device":"not_new-device","old-device":"etc"}
For start, end in replace {
    StringReplace, clipboard, clipboard, %start%, %end%, All
}
Send, ^v
}