首页 新闻 会员 周边 捐助

VBS做的一个脚本,插入U盘后自动复制文件

0
悬赏园豆:50 [待解决问题]
set fso=createobject("scripting.filesystemobject") 
set ws=createobject("wscript.shell") 
dim USB, file, folder, files 
USB=inputbox("请输入U盘的盘符"&Chr(10)&"如插入的U盘为H盘,则输入H","","H") 
folder=inputbox("请输入复制到的文件夹"&Chr(10)&"如想复制到D盘,请输入D:\","","D:\xueyue\") 
files=inputbox("请输入要复制的文件类型"&Chr(10)&"如要复制EXCEL文件,输入xls;默认为全部类型","","默认是全部类型") 
USB=USB & ":\" 
folder=folder & "\" 
if files="默认是全部类型"then 
file=USB & "*" 
else 
file=USB & "*." & files 
end if 
if FSO.FolderExists(folder) then 
else 
FSO.CreateFolder(folder) 
end if 
on error resume next 
do 
wscript.sleep 1000 
if fso.driveexists(USB) then 
fso.copyfile file,folder 
fso.copyfolder file,folder 
wscript.sleep 20000 
end if 
loop

这个代码,如果指定某一类型文件,如txt,就只能复制U盘主目录下的文本文件,子文件夹里面的并不会被复制,请问怎么修改,让他可以复制U盘上所有该类型文件和文件目录?

掠風的主页 掠風 | 初学一级 | 园豆:152
提问于:2015-11-26 14:34
< >
分享
所有回答(2)
0

遍历文件夹,一层一层的复制文件就是了,*.*表示全部类型,再试试看

CodeHsu | 园豆:5668 (大侠五级) | 2015-11-26 15:40

能写出代码吗?

支持(0) 反对(0) 掠風 | 园豆:152 (初学一级) | 2015-11-26 15:41

@掠風: 我不写这个VBS脚本,只是给你提供思路的,不好意思,我可以给你一段C#代码

 1 #region 复制目录 static bool Copy(string origin, string target)
 2 /// <summary>
 3 /// 复制目录:复制源目录中的所有文件和所有子目录到目标目录中,不会创建源目录同名目录,
 4 /// 如有需要自行添加源目录名至目标目录后面
 5 /// </summary>
 6 /// <param name="origin">源目录</param>
 7 /// <param name="target">目标目录</param>
 8 /// <returns>布尔值</returns>
 9 public static bool Copy(string origin, string target)
10 {
11     try
12     {
13         if (!origin.EndsWith("\\"))
14         {
15             origin += "\\";
16         }
17         if (!target.EndsWith("\\"))
18         {
19             target += "\\";
20         }
21 
22         DirectoryInfo info = new DirectoryInfo(origin);
23         if (!Exist(target))
24         {
25             //Create(target, info.GetAccessControl());//创建目录,访问权限
26             Create(target);//创建目录
27         }
28 
29         FileInfo[] fileList = info.GetFiles();
30         DirectoryInfo[] dirList = info.GetDirectories();
31         foreach (FileInfo fi in fileList)
32         {
33             File.Copy(fi.FullName, target + fi.Name, true);
34         }
35         foreach (DirectoryInfo di in dirList)
36         {
37             Copy(di.FullName, target + "\\" + di.Name);
38         }
39         //设置目录属性和访问权限
40         DirectoryInfo tmp = new DirectoryInfo(target);
41         tmp.Attributes = info.Attributes;
42         tmp.SetAccessControl(info.GetAccessControl());
43         return true;
44     }
45     catch (Exception ex)
46     {
47         throw ex;
48     }
49 }
50 #endregion

就是个思路,你再琢磨一下。

支持(0) 反对(0) CodeHsu | 园豆:5668 (大侠五级) | 2015-11-26 16:19
0

一、FSO的CopyFolder方法,仅能在目标目录的最后一层使用*,参见http://www.jb51.net/article/4490.htm

二、你可以试试递归的思路,自己写个函数,参考这里http://blog.csdn.net/xiciliu/article/details/8845362

邀月 | 园豆:25475 (高人七级) | 2015-11-27 09:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册