VMD Tcl脚本:如何获取当前工作目录最后一级文件夹名称并用于PDB文件命名
如何获取当前工作目录的最后一级名称并用于VMD Tcl脚本的输出文件名?
没问题!要实现这个需求,你可以利用Tcl的file tail命令配合pwd来提取当前工作目录的最后一级文件夹名称,这样就能轻松把它拼接到输出PDB文件名里了。
解决思路
获取当前工作目录的最后一级名称:
pwd命令会返回当前工作目录的完整绝对路径(比如/home/your_project/A1234)file tail命令可以提取路径的最后一部分,也就是你需要的纯文件夹名(比如从上面的路径得到A1234)
把两者结合起来,就能得到目标字符串:set dir_name [file tail [pwd]]
拼接输出文件名:
直接把这个变量拼接到writepdb的文件名参数里即可,Tcl会自动解析变量值生成合法的文件名。
修改后的完整脚本
mol load psf run_1/structure.psf xtc run_1/postDocking_wrapped.xtc set final [atomselect top "not (water or ions or resid 1216)" frame last] # 获取当前工作目录的最后一级名称 set dir_name [file tail [pwd]] # 拼接文件名并输出PDB $final writepdb last_frame_$dir_name.pdb puts "finished!" quit
解释你之前遇到的问题
- 用
file dirname [file normalize [info script]]返回.:因为如果你的脚本是在当前工作目录下运行的,info script会返回脚本的相对路径(比如./your_script.tcl),file normalize后还是当前目录下的脚本路径,file dirname自然就返回.(当前目录的简写)。 - 用
pwd得到带/的完整路径:这确实不能直接用在文件名里,但file tail刚好帮你去掉了前面的路径部分,只留下纯文件夹名,完全符合文件名的要求。
内容的提问来源于stack exchange,提问作者Ludovico Pipitò




