TCL练习6:通过递归方法搜索文件夹并返回指定后缀文件(包含子目录)
写这个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:通过递归方法搜索文件夹并返回指定后缀文件(包含子目录)相关推荐
- VB 打开文件夹,并选中指定的文件
标记一下,以防忘记. 这个功能比较方便,在打开文件夹时自动选中目标项,迅雷下载文件完成后的"打开文件夹"功能就是这样. 实现方面很简单,就是在调用EXPLORER时加个/Selec ...
- 怎样cp文件夹时忽略指定的文件夹和文件
在备份ltedecoder程序时,须要把此文件夹拷由到bak文件夹下.但decoder文件夹下有个大文件,不须要备份,还有日志问题,也不须要备份,怎样实现呢?? 方法: cd /source-dir ...
- 递归删除文件夹下面所有子文件夹中的.pyc后缀文件
首先cd到一个文件夹下面 find . -name "*.pyc" | xargs rm -f
- 查找指定文件夹下、指定后缀名的文件
描述:找出文件夾"C:\Users\12556\Desktop\all-test-jobs\all-yumh-err\"下后缀名为.txt的所有文件,每行显示一个 命令:dir C ...
- unity 打开指定文件夹_unity 打开指定路径文件夹
public static void OpenDirectory(string path){ if (string.IsNullOrEmpty(path)) return; path=path.Rep ...
- 打开文件夹并选定指定的文件
Windows下: QProcess::startDetached("explorer.exe", QStringList() << "/select,&qu ...
- VB 将文件夹复制到指定目录
Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFolder "C:\mp3", &q ...
- python找到文件夹下指定文件类型_python 读取指定文件夹中的指定文件类型的文件名...
C# 读取指定文件夹中的全部文件,并按规则生成SQL语句! 本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using S ...
- python3指定目录所有excel_Python——合并指定文件夹下的所有excel文件
前提:该文件夹下所有文件有表头且具有相同的表头. import glob # 同下 from numpy import * #请提前在CMD下安装完毕,pip install numppy impor ...
最新文章
- ICPC / CCPC / Codeforces / AtCoder 单词本
- matlab 用fplot和plot作出函数图像
- gevent queue应用1
- 修改android virtual device路径
- 实时计算 Flink 版总体介绍
- aes256加密java_使用Java和JCEKS进行AES-256加密
- 【Tensorflow】深度学习实战04——Tensorflow实现VGGNet
- codevs——2152 滑雪
- 解决ubuntu下的firefox无法在线播放音频和视频的问题
- 多线程: 多线程中断机制
- BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)
- j2me解决模拟器乱码
- (黑苹果efi文件)B550-I Ryzen 9 5950X RX 5700 XT 黑苹果efi引导文件
- vue项目实现富文本编辑器(实践用过)
- 轻松搞懂均匀分布、高斯分布、瑞利分布、莱斯分布(含MATLAB代码)
- 猎豹傅盛:升维思考,降维攻击!(深度好文)
- 腾达无线路由器连不上服务器,腾达无线路由器中继失败怎么办?
- matlab的syms无法在函数中使用_matlab syms什么意思_常见问题解析
- 什 么 是ECP、EPP ?
- 使用css3 filter属性实现图片毛玻璃效果