我确实编写了第一个if语句,它在启动时运行良好,而我的文件大小只有kbs。
当我的文件大小达到mbs时,它开始给我带来问题,比如它没有从.CSV.tmp再次将文件重命名为.CSV因此我决定在之前和之后添加文件大小(第二个IF语句),但它开始了向我展示2个调试msgBox“在B请求中输入文件:”然后“fname”。之后它失败了,不给予和错误,但也不做这项工作。
你发现它有什么问题吗?
Option Explicit
Dim FSO, FLD, FIL, GetFileSize1, GetFileSize2, f, fname
Dim strFolder,strFileName
strFolder = "\Sieb\Request"
Set FSO = CreateObject("Scripting.FileSystemObject")
set FLD = FSO.GetFolder(strFolder)
For Each Fil In FLD.Files
strFileName=Lcase(Fil.Name)
If instr (1,strFileName,"_a_request_")>0 then
if (FSO.FileExists(".\Sieb_Process_Files\a\Request\"+Fil.Name)) then
else
FSO.MoveFile ".\Request\"+Fil.Name,".\Sieb_Process_Files\a\Request\" + Fil.Name +".tmp"
FSO.MoveFile ".\Sieb_Process_Files\a\Request\" + Fil.Name +".tmp", ".\Sieb_Process_Files\a\Request\" + Fil.Name
end if
End if
If instr (1,strFileName,"_b_request_")>0 then
if (FSO.FileExists(".\Sieb_Process_Files\b\Request\"+Fil.Name)) then
else
MsgBox "Entry in B Request with File : " + Fil.Name
set fname = ".\Sieb_Process_Files\b\Request\" + Fil.Name
MsgBox fname
set f = FSO.GetFile(fname)
GetFileSize1 = f.size
MsgBox "Orignal File Size" + GetFileSize1
FSO.MoveFile ".\Request\"+Fil.Name,".\Sieb_Process_Files\b\Request\" + Fil.Name +".tmp"
set f = FSO.GetFile(".\Sieb_Process_Files\b\Request\" + Fil.Name +".tmp")
GetFileSize2 = f.size
MsgBox "Copied File Size" + GetFileSize2
MsgBox "File Moved with tmp name"
Do Until GetFileSize1=GetFileSize2
FSO.MoveFile ".\Sieb_Process_Files\b\Request\" + Fil.Name +".tmp" ,".\Sieb_Process_Files\b\Request\" + Fil.Name
MsgBox "File renamed to orignal name exiting now"
Exit Do
Loop
end if
End if
Next
Set Fil = nothing
set FSO = nothing
答案 0 :(得分:1)
显然,您的第一个If
条件成功移动了目标中不存在的文件(文件大小与其无关)显然不可能。
if (FSO.FileExists(".\Sieb_Process_Files\a\Request\"+Fil.Name)) then
else
FSO.MoveFile ".\Request\"+Fil.Name,".\Sieb_Process_Files\a\Request\" + Fil.Name +".tmp"
FSO.MoveFile ".\Sieb_Process_Files\a\Request\" + Fil.Name +".tmp", ".\Sieb_Process_Files\a\Request\" + Fil.Name
end if
将文件移动到其他位置/名称后,您的变量Fil
引用的文件不再存在,因此第二个MoveFile
(或者更确切地说,尝试访问该属性{ {1}})会引发“找不到文件”错误。如果您没有收到错误,那么代码中的Fil.Name
就是您未显示的内容。
另外,为什么要将文件移动到临时名称,然后又回到同一目录中的原始名称?这只有在将文件移动到不同卷上的热文件夹时才有意义,这在这里似乎并非如此。
这样的事情应该是你所需要的:
On Error Resume Next
Option Explicit
Dim fso, sourceFolder, targetFolder, f, target
sourceFolder = "\Sieb\Request"
targetFolder = ".\Sieb_Process_Files\a\Request"
Set fso = CreateObject("Scripting.FileSystemObject")
For Each f In fso.GetFolder(sourceFolder).Files
target = fso.BuildPath(targetFolder, f.Name)
If InStr(1, f.Name, "_a_request_", vbTextCompare) > 0 Then
If Not fso.FileExists(target) Then
f.Move target
End If
End If
Next
使vbTextCompare
比较不区分大小写,因此您不需要小写文件名。