使用 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
:这是两个没有任何其他参数的命令。绝不能将两个非功能命令放在同一行!
我需要使用 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
:这是两个没有任何其他参数的命令。绝不能将两个非功能命令放在同一行!