File 使用vbscript将文件从子文件夹递归移动到另一个文件夹

File 使用vbscript将文件从子文件夹递归移动到另一个文件夹,file,recursion,vbscript,File,Recursion,Vbscript,我需要递归一个文件夹和所有子文件夹,并将pdf文件移动到另一个文件夹。看这里,我尝试了下面的方法,但它似乎一直在运行(脚本永远不会结束),但它确实移动了文件 我还想计算源文件,递归文件夹和移动pdf(忽略大小写)文件,计算目标文件。如果源和目标相等,则运行dir*.pdf>trust.csv并发送成功电子邮件 Set fso = CreateObject("Scripting.FileSystemObject") Set Message = CreateObject("CDO.Message")

我需要递归一个文件夹和所有子文件夹,并将pdf文件移动到另一个文件夹。看这里,我尝试了下面的方法,但它似乎一直在运行(脚本永远不会结束),但它确实移动了文件

我还想计算源文件,递归文件夹和移动pdf(忽略大小写)文件,计算目标文件。如果源和目标相等,则运行dir*.pdf>trust.csv并发送成功电子邮件

Set fso = CreateObject("Scripting.FileSystemObject")
Set Message = CreateObject("CDO.Message")
Set Shell = WScript.CreateObject("WScript.Shell")
Set shell = CreateObject("Wscript.shell")


'Specify variables for Emails
strScriptServer = "ASFOXTECHOPS01"
strScriptPath = "\\techopspc01\c$\scripts\WM..."
strScriptName = "[WM-01]-WMScansToCenterDoc.vbs"
'strToEmail = ""
strCCEmail = ""
strCCEmailFail = ""
strProcessID = "[WM-01]"
strCustomerImpact = "LOW"
strCorporateImpact = "LOW"
strDocumentation = "\\FSCHAFOX01\GROUP_SHARE\Tech Group\Documentation\Automation\"
blnEmailNotification = false

'Specify variables for File Paths
'strFromPath1 = "\\fschauni01\GROUP_SHARE\Wealth Management\Scanning\ZAstrosky\"
strToPath1 = "\\fschauni01\GROUP_SHARE\Wealth Management\Tech\"
strToArchive1 = "\\fschauni01\GROUP_SHARE\Wealth Management\Scanning\" & StrYear & "_" & strMonth

'BROKE************CREATE ARCHIVE FOLDER IF IT DOES NOT EXIST
'If FSO.FolderExists(strToArchive1) Then
        'Proceed
'Else
'       FSO.CreateFolder("\\fschauni01\GROUP_SHARE\Wealth Management\Scanning\" & StrYear & "_" & strMonth)
'End If

'DELETE FILES FROM THE strToPath(s) TO AVOID OVERWRITE ERRORS
FSO.DeleteFile (strToPath1 & "*.*")

testfolder = "\\fschauni01\GROUP_SHARE\Wealth Management\Tech\"
MoveFiles fso.GetFolder("\\fschauni01\GROUP_SHARE\Wealth Management\Scanning\ZAstrosky")
blnEmailNotification = True 

'Email
'If Err <> 0 Then
'   blnEmailNotification = false
'   HandleError
'End If     

If blnEmailNotification = True Then
            'Send Results email
            objMessage.Subject = "SUCCESS - " & strProcessID & " - WM Scanned Reports Imported into CenterDoc"
            objMessage.From = "IT Automation"
            objMessage.Sender = ""
            'objMessage.To = strToEmail
            objMessage.Cc = strCCEmail
            objMessage.TextBody = "---------------SCRIPT SUCCESSFUL---------------" & vbnewline & VbCrLf & "Script successfully moved the files with no errors." & vbnewline & vbcrlf & "- Script Name:" & VbTab & VbTab & VbTab & strScriptName & VbNewLine & VbCrLf & "- Script Origination:" & VbTab & VbTab & strScriptServer & VbNewline & VbCrLf & "- Script Path:" & VbTab & VbTab & VbTab & strScriptPath & VbNewLine & VbCrLf & "- Documentation:" & VbTab & VbTab & strDocumentation & VbNewLine & VbCrLf & "- Set1:" &VbTab & VbTab & "Souce Files = " & sourcecount1 & VbTab & VbTab & "Destination Files = " & destcount1 & VbTab & VbTab & "Archive Files = " & archivecount1 & VbTab & VbTab & "------------------------------------------------------------"
            objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
            objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = ""
            objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
            objMessage.Configuration.Fields.Update
            objMessage.Send
Else
    'Do Nothing
End If

Sub HandleError
    strErrorMessage = "Error Number " & Err.Number & ":" & Err.Description 
    objMessage.Subject = "SCRIPT ERROR - " & strProcessID & " - IMMEDIATE ACTION REQUIRED"
    objMessage.From = "IT Automation"
    objMessage.Sender = ""
    objMessage.To = strToEmail
    'objMessage.Cc = strCCEmail
    objMessage.TextBody = "---------------SCRIPT ERROR---------------" & vbnewline & VbCrLf & "Script Name:" & VbTab & VbTab & VbTab & strScriptName & VbNewLine & VbCrLf & "Customer Impact:" & VbTab & VbTab & VbTab & strCustomerImpact & VbNewLine & VbCrLf & "Corporate Impact:" & VbTab & VbTab & VbTab & strCorporateImpact & VbNewLine & VbCrLf & "Error Description:" & VbTab & VbTab & VbTab & Err.Description & vbnewline & VbCrLf & "Error Number:" & VbTab & VbTab & VbTab & Err.Number & VbCrLf & VbNewLine & "Script Location:" & VbTab & VbTab & VbTab & strScriptServer & VbCrLf & VbNewLine & "Script Path:" & VbTab & VbTab & VbTab & strScriptPath & VbNewline & VbCrLf & "Documentation:" & VbTab & VbTab & strDocumentation & VbNewLine & VbCrLf & "-------------------------------------------------"
    objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = ""
    objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objMessage.Configuration.Fields.Update
    objMessage.Send
    Err.Clear
End Sub

Sub MoveFiles(fldr)
For Each f In fldr.Files
    basename  = fso.GetBaseName(f)
    extension = fso.GetExtensionName(f)
    If LCase(extension) = "pdf" Then
        dest  = fso.BuildPath(testfolder, f.Name)
        Do While fso.FileExists(dest)
            dest  = fso.BuildPath(testfolder, basename & "." & extension)
        Loop
        f.Move dest
        End If
    Next
       For Each sf In fldr.SubFolders
         MoveFiles sf
    Next
End Sub
Set fso=CreateObject(“Scripting.FileSystemObject”)
Set Message=CreateObject(“CDO.Message”)
Set Shell=WScript.CreateObject(“WScript.Shell”)
Set shell=CreateObject(“Wscript.shell”)
'为电子邮件指定变量
strScriptServer=“ASFOXTECHOPS01”
strScriptPath=“\\techopspc01\c$\scripts\WM…”
strScriptName=“[WM-01]-WMScansToCenterDoc.vbs”
'strToEmail=“”
strCCEmail=“”
strCCEmailFail=“”
strProcessID=“[WM-01]”
strcstomerimpact=“低”
strCorporateImpact=“低”
strDocumentation=“\\FSCHAFOX01\GROUP\u SHARE\Tech GROUP\Documentation\Automation\”
blnEmailNotification=false
'为文件路径指定变量
'strFromPath1=“\\fschauni01\GROUP\u SHARE\Wealth Management\Scanning\ZAstrosky\”
strToPath1=“\\fschauni01\GROUP\u SHARE\Wealth Management\Tech”
strotarchive1=“\\fschauni01\GROUP\u SHARE\Wealth Management\Scanning\”&StrYear&“&strMonth”
'已损坏**********如果不存在,请创建存档文件夹
'如果FSO.FolderExists(strotarchive1),则
“继续
”“否则呢
'FSO.CreateFolder(“\\fschauni01\GROUP\u SHARE\Wealth Management\Scanning\”&StrYear&&strMonth)
"完"
'从strToPath中删除文件以避免覆盖错误
FSO.DeleteFile(strToPath1&“***”)
testfolder=“\\fschauni01\GROUP\u SHARE\Wealth Management\Tech\”
MoveFiles fso.GetFolder(“\\fschauni01\GROUP\u SHARE\Wealth Management\Scanning\ZAstrosky”)
blnEmailNotification=True
“电子邮件
'如果错误为0,则
'blnEmailNotification=false
“汉德莱罗
"完"
如果blnEmailNotification=True,则
'发送结果电子邮件
objMessage.Subject=“成功-”&strProcessID&“-WM扫描报告导入CenterDoc”
objMessage.From=“IT自动化”
objMessage.Sender=“”
'objMessage.To=stroEmail
objMessage.Cc=strCCEmail
objMessage.TextBody=“--------------脚本成功-----------------”&vbnewline&VbCrLf&“脚本成功地移动了文件,没有错误。”&vbnewline&VbCrLf&“-脚本名称:”&VbTab&VbTab&VbTab&strScriptName&vbnewline&VbCrLf&“-脚本源代码:&VbTab&VbTab&strScriptServer&vbnewline&VbCrLf&“-脚本路径:”&VbTab&VbTab&VbTab&strScriptPath&VbNewLine&VbCrLf&&Documentation:&VbTab&VbTab&strDocumentation&VbNewLine&VbCrLf&&Set1:&VbTab&VbTab&&Souce Files=“&sourcecount1&VbTab&VbTab&&destcount1&VbTab&VbTab&&Archive Files=“&Archive count1&VbTab&VbTab&&"------------------------------------------------------------"
objMessage.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver") = ""
objMessage.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
objMessage.Send
其他的
“什么也不做
如果结束
副把手错误
strErrorMessage=“Error Number”&Err.Number&“:”&Err.Description
objMessage.Subject=“脚本错误-”&strProcessID&“-需要立即执行操作”
objMessage.From=“IT自动化”
objMessage.Sender=“”
objMessage.To=stroEmail
'objMessage.Cc=strCCEmail
objMessage.TextBody=“--------------脚本错误-----------------”&vbnewline&VbCrLf&“脚本名称:&VbTab&VbTab&VbTab&strScriptName&vbnewline&VbCrLf&“客户影响:&VbTab&VbTab&strustomimpact&vbnewline&VbCrLf&“公司影响:&VbTab&VbTab&VbTab&vbeimtab&strcorporatact&vbnewline&VbCrLf&”错误描述:“&VbTab&VbTab&VbTab&Err.Description&vbnewline&VbCrLf&”错误编号:“&VbTab&VbTab&VbTab&VbTab&vbnewline&”脚本位置:“&VbTab&VbTab&strScriptServer&VbCrLf&vbnewline&”脚本路径:“&VbTab&VbTab&VbTab&strScriptPath&VbCrLf&”文档:“&VbTab&VbTab&strDocumentation&VbNewLine&VbCrLf&”--------------------------------------------------------------”
objMessage.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver") = ""
objMessage.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
objMessage.Send
呃,明白了
端接头
子文件(fldr)
对于fldr.文件中的每个f
basename=fso.GetBaseName(f)
extension=fso.GetExtensionName(f)
如果LCase(扩展)=“pdf”,则
dest=fso.BuildPath(testfolder,f.Name)
当fso.FileExists(dest)存在时执行
dest=fso.BuildPath(testfolder、basename&“&扩展名)
环
f、 移动目的地
如果结束
下一个
对于fldr子文件夹中的每个sf
移动文件
下一个
端接头
编辑原始代码以获取更多帮助。 谢谢Zoyd


astro

将所有pdf文件从
\\fschauni01\GROUP\u SHARE\Wealth Management\Scanning\ZAstrosky
及其子文件夹移动到
\\fschauni01\GROUP\u SHARE\Wealth Management\Scanning\ZAstrosky\Tech
。您的递归逻辑是合理的,但还有另一个问题:目标文件夹是源文件夹的子文件夹。因此,脚本会不断从
\\fschauni01\GROUP\u SHARE\Wealth Managem复制文件
If LCase(extension) = "pdf" Then
    dest  = fso.BuildPath(testfolder, f.Name)
    Do While fso.FileExists(dest)
        dest  = fso.BuildPath(testfolder, basename & "." & extension)
    Loop
    f.Move dest
End If
Do While fso.FileExists(dest)
        dest  = fso.BuildPath(testfolder, basename & "." & extension) ' ☠
Loop