場景舉例: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,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 = 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 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 移動日志將輸出到 log.txt echo ---------------------------------- copy 五華區交維掃描文件\五華區共享聯通昆煙停車場-5HHQ* G:\五華區交維掃描文件\2990 >> G:\五華區交維掃描文件\2990\log.txt copy 五華區交維掃描文件\五華區師大商學院-5HHQ* G:\五華區交維掃描文件\2990 >> G:\五華區交維掃描文件\2990\log.txt echo ---------------------------------- echo 執行完畢! pause
腳本已打包成exe程序,雲盤鏈接如下:
鏈接:https://pan.baidu.com/s/1v6SLD1hBB9H29CnykXOF5w
提取碼:8888