我在一个文件夹(ini文件)中有多个文件。在每个文件中,在行之间我有一些看起来像这样的行
[12.3] ; here are some random numbers
task = task0013
... some more lines
[74.1]
task = task6435
... and so on and so forth
“任务”之后的数字不是任何特定顺序,即升序或降序。
现在在另一个ini文件(A)中,所有文件中的所有值都存储为[SectionName]:
[task0013]
name=whatever
[task6452]
name=bla bla bla
... etc
我想要做的是将ini文件(A)中的值作为新行添加到开头所有这些ini文件中的相应[SectionName],所以它看起来像这样:
[12.3] ; here are some random numbers
task = task0013
whatever
some other lines
[74.1]
task = task6435
...
答案 0 :(得分:0)
试试这里。它将修改现有的名称条目以匹配A.ini中的名称,并添加新的名称条目(如果它们不存在)。您必须将脚本文件复制到包含所有ini文件的文件夹中(A.ini或您调用它的任何内容也应该在那里)。确保首先备份文件,因为此脚本将修改现有文件,而不是创建新文件。
#include <Array.au3>
#include <File.au3>
Local $filenames = _FileListToArray(@ScriptDir)
Local $filenameA = "A.ini"
For $i = 1 To $filenames[0]
;ConsoleWrite($filenames[$i] & @CRLF)
If StringRegExp($filenames[$i], "\.ini$") == 0 Or $filenames[$i] == $filenameA Then
ContinueLoop
EndIf
Local $sectionNames = IniReadSectionNames($filenames[$i])
For $j = 1 To $sectionNames[0]
;ConsoleWrite("adding data to section " & $sectionNames[$j] & " ..." & @CRLF)
Local $curSection = IniReadSection($filenames[$i], $sectionNames[$j])
For $k = 1 To $curSection[0][0]
;ConsoleWrite($curSection[$k][0] & " -> " & $curSection[$k][1] & @CRLF)
If $curSection[$k][0] == "task" Then
Local $newTaskName = IniRead($filenameA, $curSection[$k][1], "name", "")
;ConsoleWrite("name -> " & $taskName & @CRLF)
Local $curTaskName = IniRead($filenames[$i], $sectionNames[$j], "name", "")
If $curTaskName == "" Then
_ArrayInsert($curSection, $k + 1, "name|" & $newTaskName, 0)
;_ArrayDisplay($curSection, "")
IniWriteSection($filenames[$i], $sectionNames[$j], $curSection)
Else
IniWrite($filenames[$i], $sectionNames[$j], "name", $newTaskName)
EndIf
ExitLoop
EndIf
Next
Next
Next