Warm tip: This article is reproduced from serverfault.com, please click

indexing-TCL清单foreach

(indexing - TCL list foreach)

发布于 2020-12-05 22:37:03

我有以下代码:我也想在foreach循环中添加文件名。

set outfile [open "out.tcl" w]
set allfiles "[glob /a/b/c/*.txt]"

   foreach files $allfiles {
           puts $outfile "{$files}"
   }

close $outfile

带有以上代码的当前输出


/a/b/c/123_abc.txt
/a/b/c/2_34cbd.txt
/a/b/c/45_6def.txt
/a/b/c/ABC_2CD.txt
/a/b/c/2BC_AB2.txt
********

我想要作为最终输出的内容


/a/b/c/123_abc.txt
123_abc
/a/b/c/2_34cbd.txt
2_34cbd
/a/b/c/45_6def.txt
45_6def
/a/b/c/ABC_2CD.txt
ABC_2CD
/a/b/c/2BC_AB2.txt
2BC_AB2
Questioner
Kimi
Viewed
11
Shawn 2020-12-06 07:07:21

你可以通过组合file tail(删除前导路径)和file rootname(删除后缀)来获得没有前导路径或文件扩展名的文件名

% set files /a/b/c/123_abc.txt
/a/b/c/123_abc.txt
% file tail $files
123_abc.txt
% file rootname $files
/a/b/c/123_abc
% file rootname [file tail $files]
123_abc

所以...

set allfiles [glob /a/b/c/*.txt] ;# No quotes needed
foreach files $allfiles {
    puts $outfile $files
    puts $outfile [file rootname [file tail $files]]
}