使用AutoHotKey替换.bat文件中的中间字符串而不删除文件

时间:2015-05-11 10:18:29

标签: autohotkey

我需要使用ahk脚本编辑standalone.bat文件。我想使用ahk增加我的堆大小,所以下面是我必须在我的bat文件中更改堆的行。现在我尝试使用StringReplace和FileAppend编辑它,但 FileAppend继续将字符串附加到结尾

设置“JAVA_OPTS = -Dprogram.name =%PROGNAME%-Xms64M - Xmx1426M %JAVA_OPTS%”

设置“JAVA_OPTS = -Dprogram.name =%PROGNAME%-Xms64M - Xmx1426M %JAVA_OPTS%” xms000M

我是.ahk的新手,我使用了一些搜索尝试了这个

Loop, read, C:\standalone.bat

{
 Line = %A_LoopReadLine%
 replaceto = xms000M
 IfInString, Line, Xmx1426M 
    , Line, replaceto, %Line%, %replaceto%      
    FileAppend, %replaceto%`n
 StringReplace FileAppend
}

是否可以使用ahk替换中间字符串。感谢

1 个答案:

答案 0 :(得分:0)

Fileappend将始终附加到文件的末尾。为什么要阻止临时删除批处理文件?

通常,在ahk中,你会这样做..

batFile = C:\standalone.bat

output := ""
Loop, read, %batFile%
{
    Line = %A_LoopReadLine%
    IfInString, Line, Xmx1426M
    {
        StringReplace, Line, Line, Xmx1426M, xms000M
        ; note: Regular Expressions can be used like Line := regExReplace(Line, "...", "...")
    }

    output .= Line . "`n"   ; note: this is the same as if to say output = %output%%Line%`n or output := output . line "`n"
}

FileDelete, %batFile%
FileAppend, %output%, %batFile%

这会将您的文件删除几毫秒,然后再用新内容重新创建它。我没有看到没有删除编辑它有任何区别,因为无论哪种方式,你都需要对文件的写访问权。

关于代码示例的一些说法:

IfInString, Line, Xmx1426M 
    , Line, replaceto, %Line%, %replaceto%

将被解释为

  

“如果字符串'Line'包含'Xmx1426M,Line,replaceto,%Line%,%replaceto%'”

没有任何意义。

FileAppend, %replaceto%\n缺少目标文件。

StringReplace FileAppend:这两个命令没有任何其他参数。你绝不能把两个非函数命令放在同一行!