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

Replace a middle string in .bat file using AutoHotKey without deleting file

我需要使用 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替换中间字符串。谢谢

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

通常,嗯,你会这样做..

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%

将被解释为

"If the string 'Line' contains 'Xmx1426M , Line, replaceto, %Line%, %replaceto%'"

这没有任何意义。

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

StringReplace FileAppend:这是两个没有任何其他参数的命令。绝不能将两个非功能命令放在同一行!