写这个TCL脚本的主要目的是搜索目标文件夹及其子文件夹下的所有文件,然后记录在指定的文件中。可以指定目标文件夹名称、信息记录位置和文件后缀等3种参数。

该脚本将用于Vivado的non-project编译过程,被综合和布线脚本调用。

define.tcl中定义了目标文件夹名称、信息记录位置、文件后缀类型、器件part等信息。findAllFiles.tcl脚本根据define.tcl中的参数搜索目标文件夹,当文件后缀类型参数(ext)为.hdl时,会搜索.v、.vh、.vhd、.sv等文件的路径和名称,并记录在./Tcl/code.rd中;当文件后缀类型参数为.xdc时,会搜索.xdc文件,并记录在./Tcl/cons.rd中。设计代码放置在srcs文件夹中,约束文件放置在constraints文件夹中。如果没有分类放置也可以正确识别。

set part "xcvu3p-ffvc1517-2-e"
set srcsPath "../srcs"
set consPath "../Constraints"
set codeRec "./code.rd"
set consRec "./cons.rd"
set codeExt ".hdl"
set consExt ".xdc"set top "Top"
set synthDir "$top.synth"
set synthLog "synth.log"
set synthDcp "_synth.dcp"

以下是findAllFiles.tcl的内容。

source ./define.tclset status [catch {set codeF [open $codeRec w+]} msg]
if {$status} { puts $msg }proc findFiles { dir result ext } {if {![file exists $dir] || ![file isdirectory $dir]} {return -code error "File not exists or not a directory."}# 使用以下方式获得文件名称将不包含路径,在通过if {[file isfile $f]}判断时是无法索引到该文件的,所以无法进入该条件# set files [glob -nocomplain -directory $dir/ -tails *]set files [glob -nocomplain -directory $dir/ *]foreach f $files {if {[file isfile $f]} {# 根据ext参数匹配不同后缀的文件,记录.v .vh .vhd .sv文件if {[string match $ext $::codeExt]} {set fExt [file extension $f]    if {[expr {$fExt==".v"}] || [expr {$fExt==".vh"}] || [expr {$fExt==".vhd"}] || [expr {$fExt==".sv"}]} {# glob 返回的文件是带有路径的,除非使用-tailsputs $fputs $result $f}} elseif {[string match $ext $::consExt]} {# 记录xdc文件set fExt [file extension $f]    if {[expr {$fExt==".xdc"}]} {# glob 返回的文件是带有路径的,除非使用-tailsputs $fputs $result $f}}} elseif {[file isdirectory $f]} {# 递归findFiles $f $result $ext } }
}# 在tcl脚本中完成文件的写操作后一定要close文件,否则文件中不会写入任何内容。
findFiles $srcsPath $codeF $codeExt
close $codeFset status [catch {set consF [open $consRec w+]} msg]
if {$status} { puts $msg }
findFiles $consPath $consF $consExt
close $consF

以上代码经过测试可以找出并分类存储指定的文件类型,可搜索所有子文件夹。所有tcl文件放置于Tcl文件夹中,srcs和constraints放置在与Tcl同级的目录中。

TCL练习6:通过递归方法搜索文件夹并返回指定后缀文件(包含子目录)相关推荐

  1. VB 打开文件夹,并选中指定的文件

    标记一下,以防忘记. 这个功能比较方便,在打开文件夹时自动选中目标项,迅雷下载文件完成后的"打开文件夹"功能就是这样. 实现方面很简单,就是在调用EXPLORER时加个/Selec ...

  2. 怎样cp文件夹时忽略指定的文件夹和文件

    在备份ltedecoder程序时,须要把此文件夹拷由到bak文件夹下.但decoder文件夹下有个大文件,不须要备份,还有日志问题,也不须要备份,怎样实现呢?? 方法: cd /source-dir ...

  3. 递归删除文件夹下面所有子文件夹中的.pyc后缀文件

    首先cd到一个文件夹下面 find . -name "*.pyc"  | xargs rm -f

  4. 查找指定文件夹下、指定后缀名的文件

    描述:找出文件夾"C:\Users\12556\Desktop\all-test-jobs\all-yumh-err\"下后缀名为.txt的所有文件,每行显示一个 命令:dir C ...

  5. unity 打开指定文件夹_unity 打开指定路径文件夹

    public static void OpenDirectory(string path){ if (string.IsNullOrEmpty(path)) return; path=path.Rep ...

  6. 打开文件夹并选定指定的文件

    Windows下: QProcess::startDetached("explorer.exe", QStringList() << "/select,&qu ...

  7. VB 将文件夹复制到指定目录

    Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFolder "C:\mp3", &q ...

  8. python找到文件夹下指定文件类型_python 读取指定文件夹中的指定文件类型的文件名...

    C# 读取指定文件夹中的全部文件,并按规则生成SQL语句! 本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using S ...

  9. python3指定目录所有excel_Python——合并指定文件夹下的所有excel文件

    前提:该文件夹下所有文件有表头且具有相同的表头. import glob # 同下 from numpy import * #请提前在CMD下安装完毕,pip install numppy impor ...

最新文章

  1. ICPC / CCPC / Codeforces / AtCoder 单词本
  2. matlab 用fplot和plot作出函数图像
  3. gevent queue应用1
  4. 修改android virtual device路径
  5. 实时计算 Flink 版总体介绍
  6. aes256加密java_使用Java和JCEKS进行AES-256加密
  7. 【Tensorflow】深度学习实战04——Tensorflow实现VGGNet
  8. codevs——2152 滑雪
  9. 解决ubuntu下的firefox无法在线播放音频和视频的问题
  10. 多线程: 多线程中断机制
  11. BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)
  12. j2me解决模拟器乱码
  13. (黑苹果efi文件)B550-I Ryzen 9 5950X RX 5700 XT 黑苹果efi引导文件
  14. vue项目实现富文本编辑器(实践用过)
  15. 轻松搞懂均匀分布、高斯分布、瑞利分布、莱斯分布(含MATLAB代码)
  16. 猎豹傅盛:升维思考,降维攻击!(深度好文)
  17. 腾达无线路由器连不上服务器,腾达无线路由器中继失败怎么办?
  18. matlab的syms无法在函数中使用_matlab syms什么意思_常见问题解析
  19. 什 么 是ECP、EPP ?
  20. 使用css3 filter属性实现图片毛玻璃效果

热门文章

  1. 为什么新冠德尔塔毒株如此“危险”?
  2. 在Dynamis CRM中打造一键保存关闭刷新案例的功能
  3. 大数据框架Hadoop篇之Hadoop入门
  4. focusky导出html修改,Focusky输出HTML MP4 EXE APP ZIP动画演示文件
  5. 45、优惠券秒杀(实现一人一单)
  6. 2020牛客国庆集训派对day2 补题J
  7. srs 直播连麦环境搭建
  8. .c_str()函数解析
  9. 用彩信模块发图片问题总结(STM32)
  10. 获取两个日期间的年份差 月份差 日期差