码迷,mamicode.com
首页 > 移动开发 > 详细

vbs+bat实现批量将文件从A文件夹移动到B文件夹

时间:2021-05-24 08:57:37      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:批处理文件   user   内容   date   日志   log   work   生成   auth   

场景举例:A文件夹有500个文件,其中有50个文件文件需要移动到B文件夹,此时用肉眼去找就费时费力;

前提条件:1.你有A文件夹500个文件的文件名,将文件名记录在Excel内,同时能筛选出需要移动的那50个文件的文件名;

实现原理:利用vbs获取到存文件名称的那个Excel表,进入到对应页签,获取需要移动的50个文件名称;

     然后把名称输出到bat文档,拼接出一个移动文件的bat脚本,最后再执行生成的bat文件,即可实现文件移动;

     bat脚本实际就是copy命令,脚本执行完成之后会对应生成一个log.txt类日志文件,

     之所以说是类日志,是因为他只是记录了脚本执行的过程,并不是真正的日志文件,主要作用是用于排查看哪些文件没有移动(复制)成功;

 

@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,titleSet 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 = fso.createtextfile(sofilepath & "\fileprocessing" & timefilename & ".bat",8) 此处是生成一个bat文件,第二个参数 2 表示重写(第二次写出的内容会把第一次的覆盖),如果是 8 表示该文件写入的内容会追加;

以下是利用变量存储bat脚本,然后写出到bat文件中
a = "@echo off"
b = letter & ":"
c = "echo ---------------------------------"
d = "echo 开始移动文件。。。执行完毕前请勿关闭页面!"
e = "echo 移动日志将输出到 log.txt"
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 & "\log.txt"
    msgbox nuber
    f1.WriteLine(nuber)
    Count = Count + 1
Next
MsgBox Countmsgbox 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 移动日志将输出到 log.txt
echo ----------------------------------
copy 五华区交维扫描文件\五华区共享联通昆烟停车场-5HHQ* G:\五华区交维扫描文件\2990 >> G:\五华区交维扫描文件\2990\log.txt
copy 五华区交维扫描文件\五华区师大商学院-5HHQ* G:\五华区交维扫描文件\2990 >> G:\五华区交维扫描文件\2990\log.txt

echo ----------------------------------
echo 执行完毕!
pause

 

vbs+bat实现批量将文件从A文件夹移动到B文件夹

标签:批处理文件   user   内容   date   日志   log   work   生成   auth   

原文地址:https://www.cnblogs.com/zhou0910/p/14767595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!