场景举例:A⽂件夹有500个⽂件,其中有50个⽂件需要移动到B⽂件夹,此时⽤⾁眼去就费时费⼒;
前提条件:1.你有A⽂件夹500个⽂件的⽂件名,将⽂件名记录在Excel内,同时能筛选出需要移动的那50个⽂件的⽂件名;
实现原理:利⽤vbs获取到存⽂件名称的那个Excel表,进⼊到对应页签,获取需要移动的50个⽂件名称;
然后把名称输出到bat⽂档,拼接出⼀个移动⽂件的bat脚本,最后再执⾏⽣成的bat⽂件,即可实现⽂件移动;
bat脚本实际就是copy命令,脚本执⾏完成之后会对应⽣成⼀个类⽇志⽂件,
之所以说是类⽇志,是因为他只是记录了脚本执⾏的过程,并不是真正的⽇志⽂件,主要作⽤是⽤于排查看哪些⽂件没有移动(复制)成功;
'@author:zks
'@edition:V1.2
'@UpdateDate:2021-05-13
'@function:实现从Excel提取⽂件名并⽣成copy⽂件的批处理脚本,实现批量将⽂件从A⽂件夹移动到B⽂件夹的操作;
'@从Excel获取需要的数据
Dim oExcel,oWb,oWb1,Osheet,Osheet1,x,y,i,l,title,nuber,filepath,filepath1
Dim count
count = 0
Dim a,b,c,d,e,f,g,h,letter,sofilepath,timefilename
Dim fso,f1,f2
title = "提取⽂件指定数据"
Set oExcel = CreateObject("Excel.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
timefilename = Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now)'最终⽣成的bat⽂件名称,⽤时间来命名,以免多次⽣成导致⽂件名重复
oWb = InputBox("要提取的⽬标⽂件存放路径(精确到XXX⽂件):",title)'存放⽂件名的那个Excel⽂件
Set oWb1 = oExcel.Workbooks.Open(oWb)'打开这个Excel⽂件
oSheet = InputBox("⽬标⽂件的页签名称(如Sheet1,Sheet2):",title)'输⼊存放50个需要移动⽂件名的页签
Set oSheet1 = oWb1.Sheets(oSheet)'进⼊到存放需要移动的50个⽂件名的页签
'--MsgBox oSheet,vbokonly,title
'Set oWb = oExcel.Workbooks.Open("C:\Users\lenovo\Desktop\计划问题\辅助核算对照信息.xls")
文件名提取'Set oSheet1 = oWb.Sheets("HSXM")
'起始⾏号指的是,⽐如存⽂件名的表叫filename.xlsx,
'其中有Sheet1,Sheet2两个页签,Sheet1页签存储500个⽂件名,Sheet2页签存储的50个需要移动的
⽂件名,同时⽂件名存储在A列;
'第1⾏是标题,第2⾏才是⽂件名,此处的起始⾏号就填2,取数就会从第⼆⾏开始;
l = InputBox("取数起始⾏号(即表格⾏号,如第⼀⾏输⼊:1):",title)
x = InputBox("取数最终⾏号(即表格⾏号,例如提取到第10⾏,输⼊:10):",title) '最终⾏号:我们需要提取50个⽂件名,⽂件名存放在A列,第1⾏是标题,所以第50个⽂件名⾏号为51,此处就填51;
y = InputBox("取数列编码(即表格列编号,如A列,输⼊:A):",title) '列编码指的就是你要取哪⼀列的数据,例如我们例⼦中的A列;
letter = InputBox("需要移动的源⽂件存放盘符(如C盘,输⼊:C):",title) '指的是那500个⽂件存放的盘符;
filepath = InputBox("需要移动的源⽂件存放路径(如:C:\Users\lenovo\Desktop,路径最后不能加\):",title) '指的是那500个⽂件存放的路径;
filepath1 = InputBox("移动后新⽂件存放路径(如:C:\Users\lenovo\Desktop\tset,路径最后不能加\):",title) '50个⽂件移动后需要存放的路径;
sofilepath = InputBox("请输⼊bat⽂件存放路径(同上,路径最后不能加\):",title) '⽣成移动⽂件的bat脚本⽂件存放的路径;
'MsgBox sofilepath
Set f1 = atetextfile(sofilepath & "\fileprocessing" & timefilename & ".bat",8) '此处是⽣成⼀个bat⽂件,第⼆个参数 2 表⽰重写(第⼆次写出的内容会把第⼀次的覆盖),如果是 8 表⽰该⽂件写⼊的内容会追加; '以下是利⽤变量存储bat脚本,然后写出到bat⽂件中
a = "@echo off"
b = letter & ":"
c = "echo ---------------------------------"
d = "echo 开始移动⽂件。。。执⾏完毕前请勿关闭页⾯!"
e = "echo 移动⽇志将输出到 "
f = "echo ----------------------------------"
g = "echo 执⾏完毕!"
h = "pause"
'这⾥开始写⼊
f1.WriteLine(a)
f1.WriteLine(b)
f1.WriteLine(c)
f1.WriteLine(d)
f1.WriteLine(e)
f1.WriteLine(f)
'这⾥是利⽤for循环去遍历Excel表⾥⽬标的⾏和列,获取需要移动的⽂件名,然后再拼接出⼀条bat语句⽤nuber存储并写出到bat⽂件;
For i = l To x
nuber = "copy " & filepath & "\" & oSheet1.Range(y & i).value & "* " & filepath1 & " >> " & filepath1 & "\"
'msgbox nuber
f1.WriteLine(nuber)
Count = Count + 1
Next
'MsgBox Count
'msgbox osheet.Range(j&i).value
f1.WriteLine(g)
f1.WriteLine(h) '⾄此,bat⽂件写⼊完成;
MsgBox"⽣成的批处理⽂件已存放到" & sofilepath & "请查收!"
f1.Close()
Set f1 = Nothing
Set fso = Nothing
Set oWb1 = Nothing
Set Osheet1 = Nothing
oExcel.Quit
Ps:实际上移动⽂件仅仅只是执⾏批处理之后实现的,下⾯放⼀下批处理源码
@echo off
G:
echo ---------------------------------
echo开始移动⽂件。。。执⾏完毕前请勿关闭页⾯!
echo移动⽇志将输出到
echo ----------------------------------
copy五华区交维扫描⽂件\五华区共享联通昆烟停车场-5HHQ* G:\五华区交维扫描⽂件\2990 >> G:\五华区交维扫描⽂件\
copy五华区交维扫描⽂件\五华区师⼤商学院-5HHQ* G:\五华区交维扫描⽂件\2990 >> G:\五华区交维扫描⽂件\ echo ----------------------------------
echo执⾏完毕!
pause
脚本已打包成exe程序,云盘链接如下:
发布评论