Two problems: 1. speed 2. progressVar is not updated if level > 0 (recursive search) 3. it has to work with tcl 8.0 ---- proc GetFileList {path args} { if {[lindex $args 0] != 0 && [lindex $args 0] != 1} { set level 0 } else { set level [lindex $args 0] set args [lrange $args 1 end] if {$level == 1} { set searchRecursiv 1 while {[llength $args] > 0} { set opt [lindex $args 0] switch -- $opt { -progressVar { upvar #0 [lindex $args 1] progressVar set args [lrange $args 2 end] } default { return -code error "unknown option '$opt'" } } } } } if {$level == 0} { set extOK 0 set relPath 1 set searchRecursiv 1 set regExp ".*" #puts stderr "args'$args' -> '[llength $args]'" while {[llength $args] > 0} { set opt [lindex $args 0] switch -- $opt { -ext { set ext [lindex $args 1] set extOK 1 set args [lrange $args 2 end] } -relPath { set relPath [lindex $args 1] set args [lrange $args 2 end] } -recursiv { set searchRecursiv [lindex $args 1] set args [lrange $args 2 end] } -progressVar { upvar #0 [lindex $args 1] progressVar set args [lrange $args 2 end] } -regExp { set regExp [lindex $args 1] set args [lrange $args 2 end] } default { return -code error "unknown option '$opt'" } } #puts stderr "args'$args' -> '[llength $args]'" } } set fileList "" set fL "" set path [Backslash2Slash $path] set all [glob -nocomplain $path/*] dputs "all 'glob -nocomplain $path/*' -> '$all'" foreach f $all { update idletasks if {[file isdirectory $f]} { set progressVar $f;update if $searchRecursiv { set temp [GetFileList $f 1 -progressVar progressVar] foreach t $temp { lappend fL $t } } } else { lappend fL $f } } if {$level == 0} { foreach f $fL { if {![regexp $regExp $f]} {continue} if $extOK { dputs "checke extension '$ext' bei '$f' -> '[file extension $f]'" set isExt [string range [file extension $f] 1 end] if {[lsearch [string tolower $ext] [string tolower $isExt]] == -1} { continue } } if $relPath { regsub -- "$path/" $f "" f } lappend fileList $f } } else { set fileList $fL } return $fileList } ----