加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用TCL脚本复制某类型的文件到其他盘

(2015-03-29 19:58:48)
标签:

房产

    这个问题源于猪八戒网上的一个小项目,项目是这样的,使用脚本实现以下功能:

1、文件在U盘中,隐藏在文件夹date里

2、设定好插入U盘自动运行,但如果电脑关闭了U盘自动运行功能,能通过点击U盘中的setup.exe运行

3、能在文件夹date中增设一个以电脑命名名的文件夹,属性隐藏

4、能自动将硬盘中的所有.xls文件copy到U盘的date文件夹下的以电脑名命名的文件夹中,并同时将后缀改名 

     为.dat,属性为隐藏

5、不能有任何提示,任何可见窗口,纯后天操作,包括文件错误、磁盘满、同名覆盖等

6、按我的文档,桌面,D: ,E ,F,G ,C顺序搜索并copy,任何时候拔出U盘均能不提示信息

7、杀毒软件不能报毒

 

对于上面的这么多功能,作为一个新人,我是无法用tcl实现的,但是可以将问题简化。于是提出了:

                         将E盘目录下的,暂时不考虑子目录中的,.tcl文件复制到F盘

对于这个任务,需要解决的问题:

1、如何知道E盘目录中.tcl文件个数和名称

2、知道了名称怎么复制过去。

 

用到的指令:cd    glob  -path  -tails   split   llength  while  lindex  file copy  incr

指令说明:

cd    管理工作目录

      在tcl中,一共有两个命令来管理当前工作目录,pwd和cd 。其中pwd和UNIX下的pwd命令完全一样, 没有 参 数,返回当前目录的完整路径。

    cd 命令也和UNIX命令也一样,使用一个参数,可以把工作目录改变为参数提供的目录。如果cd 没使用参数,UNIX下,会把工作目录变为启动TCL脚本的用户的工作目录,WINDOWS下会把工作目录变为windows操作系统的安装目录所在的盘的根目录(如:C:/)。值得注意的是,提供给cd的参数中路径中的应该用'/'而不是'\'。如 cd C:/TCL/lib。这是UNIX的风格。

glob  操作文件名

      TCL提供了两个命令进行文件名操作:glob和file,用来操作文件或获取文件信息。glob命令采用一种或多种模式作为参数,并返回匹配这个(些)模式的所有文件的列表。file的指令特别多,这里不详细介绍。

 -path -tails   glob指令的设置

       这个都是glob中的应用,具体不详细讲,在这里就是使得glob返回的内容为文件名。

split        处理字符串

               该指令完成字符串到list的转换

llength    该指令返回list中元素的个数

while       流程控制

lindex     该指令从一个list中取得元素

file copy  实现文件的复制

incr         改变变量值,作用为+

 

代码为:

cd e:/
set f [glob  -path e:/ -tails *.tcl]
split $f
set num [ expr {[llength $f] -1} ]

while { $num >= 0 } {
        set f_name [lindex $f $num ]
        file copy $f_name  f:/$f_name
        incr num -1
   }

虽然代码很简短,但是有很多点需要注意。

注意点一:

     首先第一行是必须的,必须将工作目录修改为E盘,否则无法进行file copy操作

注意点二:

     列表元素从0开始,所以元素个数得减一

注意点三:

     while语句的第二个{必须与while一行,否则运行会报错

 

代码解释:

      首先将工作目录换为E盘,然后通过glob获得所有.tcl文件列表,在tcl中默认保存为字符串。由于字符串中的文件名无法获知,所以需要将字符串转换为list。这里幸运的是,每个文件名后面都有一个分割字符,这样刚好每个文件名就是list的每个元素。在得到文件名后,用while语句实现多个文件的复制。

结果为:

E盘中的tcl文件为:

http://s2/mw690/0033TwPDzy6R5cO7CWle1&690

F盘复制到的文件为:

http://s3/mw690/0033TwPDzy6R5cRE2oW62&690

       虽然这个代码很简单,实验结果也很简单,但是这说明tcl脚本能够实现对文件的搜索和复制功能,这是一个标志性的成功,表明用tcl能够实现上面的项目要求。从而可以实现用U盘盗取别人计算机某种类型文件的功能。想想就很刺激有木有。


 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有