まず、最初の「ファイル」は実際にはパターンです。それを実際のファイル名のリストに展開する必要があります。でそれを行いglob
ます。
# In braces because there are backslashes
set pattern {C:\Program Files(X86)\Route\*.tcl}
# De-fang the backslashes
set pattern [file normalize $pattern]
# Expand
set sourceFilenames [glob $pattern]
次に、それらをコピーします。これを行うには、次のようにします。
set target {C:\Sanity_Automation\Route\}
file copy {*}$sourceFilenames [file normalize $target]
しかし実際には、移動したファイルのリストを作成して、次のステップで処理できるようにする必要もあります。したがって、これを行います。
set target {C:\Sanity_Automation\Route\}
foreach f $sourceFilenames {
set t [file join $target [file tail $f]]
file copy $f $t
lappend targetFilenames $t
}
では挿入処理を行っていきます。挿入するデータを取得することから始めましょう。
set f [open {C:\Script.tcl}]
set insertData [read $f]
close $f
ここで、各ファイルを調べて読み込み、挿入する場所を見つけ、場所が見つかったら実際に挿入してから、ファイルを書き戻します。(ファイルを直接変更しようとするのではなく、読み取り/メモリ内変更/書き込みによってテキスト編集を行います。常に。)
# Iterating over the filenames
foreach t $targetFilenames {
# Read in
set f [open $t]
set contents [read $f]
close $f
# Do the search (this is the easiest way!)
if {[regexp -indices -line {^.*CloseAllOutputFile} $contents where]} {
# Found it, so do the insert
set idx [lindex $where 0]
set before [string range $contents 0 [expr {$idx-1}]]
set after [string range $contents $idx end]
set contents $before$insertData$after
# We did the insert, so write back out
set f [open $t "w"]
puts -nonewline $f $contents
close $f
}
}
通常、私はコピーの一部として変更を行いますが、ここではあなたのやり方で行います。