【问题标题】:VB Do While only works for one iterationVB Do While 仅适用于一次迭代
【发布时间】:2012-08-21 15:13:04
【问题描述】:

我以前从未使用 VB 做过任何事情,我正在尝试解决这个脚本的一个小问题。基本上,脚本应该在文件夹中查找所有 jpg,如果文件名已经存在,则将其从目标文件夹中删除,将值添加到表中,然后重命名源文件,使其存在于目标文件夹中。

此脚本在一定程度上起作用,例如,如果文件不存在,它将重命名任何文件,但对于已经存在的任何文件,它只处理一个然后结束。我可以多次运行它以清除其余部分,但宁愿它一次将它们全部清除。我已经做了很多阅读,但看不出哪里出了问题。任何人都可以对此有所了解吗?

Public Function GetLPUFileAddress()

Dim strSourceFolder As String
Dim strFile As String
Dim strTargetFolder As String

Dim dbs As DAO.Database
Dim rstMgr As DAO.Recordset

strSourceFolder = "C:\Users\Images\LPU-HOLDING\"
strFile = Dir(strSourceFolder & "*.JPG")
strTargetFolder = "C:\Users\Images\LPU\"

Do While strFile <> ""
    If Dir(strTargetFolder & strFile) <> "" Then Kill strTargetFolder & strFile
    CurrentDb.Execute "INSERT INTO TBL_LPU ( File_Name, Import_Date ) VALUES ('" & strFile & "',Date())"
    Name strSourceFolder & strFile As strTargetFolder & strFile
    strFile = Dir
Loop

End Function

【问题讨论】:

  • 这是在 VB 6.3 中。不确定这是否有任何相关性。

标签: vbscript


【解决方案1】:

通过使用适当的过滤器(例如 "C:\Users\Images\LPU\*.JPG")调用 Dir() 函数,您可以开始枚举并获取第一个文件名。
之后,不带任何参数地反复调用Dir()函数,你会得到所有*.JPG文件名,每次调用一个。
如果您在任何时候使用参数调用Dir(),这将重置当前枚举并开始一个新枚举。

因此,在使用Dir() 进行枚举时,您不能使用Dir() 检查文件夹中的文件是否存在。这会重置枚举。

你必须要么使用 some other waychecking existance of the file,要么直接尝试杀死它而不检查,ignoring the error

【讨论】:

  • 感谢您的解释,我没有意识到第二次 Dir() 调用会重置参数。我会看看你建议的替代方法,看看我是否不能让其他方法起作用。
  • 我打算建议使用 FOR EACH 循环而不是 DO WHILE。当然,你会想像@GSerg 建议的那样使用 FileScriptingObject。您可以读取文件夹中的每个文件,然后从那里执行逻辑。这是一个给你的例子:go4expert.com/forums/showthread.php?t=927
猜你喜欢
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2013-07-07
  • 1970-01-01
  • 2023-03-06
  • 2020-07-15
相关资源
最近更新 更多