相关阅读Tcl语言https://blog.csdn.net/weixin_45791458/category_12488978.html?spm1001.2014.3001.5482file命令是Tcl中用于处理文件和目录的重要命令。它本身不是一个具体的文件操作而是需要配合子命令使用例如file exists用于判断文件是否存在file isfile用于判断是否为普通文件file mkdir用于创建目录。 Tcl中的file命令采用“主命令子命令参数”的形式file subcommand arg arg ...文件测试existsfile exists用于判断指定路径是否存在。该路径可以是普通文件也可以是目录。if {[file exists test.txt]} { puts 文件或目录存在 } else { puts 文件或目录不存在 }需要注意的是file exists只判断路径是否存在并不区分该路径是普通文件还是目录。isfilefile isfile用于判断指定路径是否为普通文件。如果路径不存在或者路径存在但不是普通文件则返回0。if {[file isfile test.txt]} { puts 是普通文件 } else { puts 不是普通文件 }如果只想判断一个普通文件是否存在通常可以使用file isfile而不是file exists。isdirectoryfile isdirectory用于判断指定路径是否为目录。if {[file isdirectory mydir]} { puts 是目录 } else { puts 不是目录 }readablefile readable用于判断指定文件或目录是否具有可读权限。if {[file readable test.txt]} { puts 文件或目录可读 } else { puts 文件或目录不可读 }writablefile writable用于判断指定文件或目录是否具有可写权限。if {[file writable test.txt]} { puts 文件或目录可写 } else { puts 文件或目录不可写 }executablefile executable用于判断指定文件是否可执行。if {[file executable run.sh]} { puts 文件可执行 } else { puts 文件不可执行 }路径处理dirnamefile dirname用于获取路径中的目录部分。set path /home/user/test.txt puts [file dirname $path] /home/user set path ./user/test.txt puts [file dirname $path] ./usertailfile tail用于获取路径中的最后一部分通常也就是文件名。set path /home/user/test.txt puts [file tail $path] test.txtextensionfile extension用于获取文件扩展名。set filename top.v puts [file extension $filename] .vrootnamefile rootname用于去掉文件路径中的最后一个扩展名。set filename top.v puts [file rootname $filename] top对于带路径的文件同样适用。set path ./src/top.v puts [file rootname $path] ./src/topjoinfile join用于拼接路径。相比直接使用/连接路径file join更加规范也更适合跨平台脚本。set dir ./src set filename top.v set path [file join $dir $filename] puts $path ./src/top.vsplitfile split用于将路径拆分成列表。set path /home/user/test.txt puts [file split $path] / home user test.txt set path ./user/test.txt puts [file split $path] . user test.txtnormalizefile normalize用于将路径转换为绝对路径会处理.、..等路径成分。set path ./src/../test.txt puts [file normalize $path] /home/user/project/test.txt文件信息sizefile size用于获取文件大小单位为字节。set filename test.txt if {[file exists $filename]} { puts 文件大小为[file size $filename] 字节 }需要注意的是如果文件不存在直接使用file size会报错。因此通常先用file exists或file isfile进行判断。set filename test.txt if {[file isfile $filename]} { puts 文件大小为[file size $filename] 字节 } else { puts 文件不存在或不是普通文件 }typefile type用于获取路径对应的文件类型。set filename test.txt if {[file exists $filename]} { puts [file type $filename] }常见返回结果包括file directory linkmtimefile mtime用于获取文件最后一次修改时间返回值通常是一个时间戳。set filename test.txt if {[file exists $filename]} { puts [file mtime $filename] }如果希望将时间戳转换为可读格式可以配合clock format命令。set filename test.txt if {[file exists $filename]} { set t [file mtime $filename] puts [clock format $t -format %Y-%m-%d %H:%M:%S] }atimefile atime用于获取文件最后一次访问时间。set filename test.txt if {[file exists $filename]} { set t [file atime $filename] puts [clock format $t -format %Y-%m-%d %H:%M:%S] }文件和目录操作mkdirfile mkdir用于创建目录。如果中间目录不存在也会一起创建。set dir result/report if {![file isdirectory $dir]} { file mkdir $dir }deletefile delete用于删除文件或目录。file delete test.txt如果要删除非空目录可以使用-force选项。file delete -force output使用-force时需要谨慎因为它会递归删除目录中的内容。set dir output if {[file exists $dir]} { file delete -force $dir }copyfile copy用于复制文件或目录。file copy a.txt b.txt如果目标文件已经存在默认会报错。可以使用-force选项强制覆盖。file copy -force a.txt b.txtset src report.txt set dst backup/report.txt if {[file isfile $src]} { file mkdir [file dirname $dst] file copy -force $src $dst }renamefile rename可以用于重命名文件也可以用于移动文件。file rename old.txt new.txt移动文件file rename test.txt backup/test.txt如果目标文件已经存在默认会报错。可以使用-force选项覆盖。file rename -force test.txt backup/test.txt