vbs+bat實現批量將文件從A文件夾移動到B文件夾


場景舉例: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM