2013-07-23 144 views
1

我有一个系统运行一个老的FoxPro程序,它生成8个字符长的DBF文件。我们每天备份程序文件夹,但在下午5点,程序产生了很多这样的垃圾dbf,这是一个麻烦。我只需在备份脚本中设置一个del * .dbf文件,但在名称中有几个dbf需要运行该程序。批处理文件运行两个vbs脚本进行备份

文件位于F:\清洁该\

任何数字标题的.dbf文件需要被删除

任何字母名为.dbf文件应该被单独留在家中

Set objFSO = CreateObject("Scripting.FileSystemObject") 
objStartFolder = "F:\Clean This\" 
Set objFolder = objFSO.GetFolder(objStartFolder) 
Set colFiles = objFolder.Files 
collide = "ABCEDFGHIJKLMNOPQRSTUVWXYZ" 

For Each objFile in colFiles 
    If UCase(objFSO.GetExtensionName(objFile.name)) = "DBF" Then 
     num = 1 
     For num = 1 to 26 'find files with names start with # 0-9 
      If Left(objFile.Name,1) = Left(collide,num) Then 
       Wscript.Echo "Save " & objFile.Name 
      Else If int(Left(objFile.Name,1)) > 0 Then 
       Wscript.Echo "Delete!" 
      End IF 
      End If 
     Next 
    End If 
Next 

由于你可以告诉If语句可以做得更好,我不确定如何更好地解决它。两个Wscript.Echo命令只是占位符,因为如果其他东西我不能找到一个合适的删除功能,可以在dos环境下工作(我已经尝试杀死,否)。

建议和改进将不胜感激!

回答

0

我终于懂了工作,和这里的最终的结果是什么。它的工作原理非常奇妙,而且更高级别的人和其他人都比它的内置实用程序效果更好,让我们留下了深刻的印象。得分了!

Set objFSO = CreateObject("Scripting.FileSystemObject") 
objStartFolder = "..\System Folder" 
Set objFolder = objFSO.GetFolder(objStartFolder) 
Set DirFiles = objFolder.Files 
Dim oFile 
For Each objFile in DirFiles 
If "dbf" = LCase(objFSO.GetExtensionName(objFile.Name)) Then 
    If IsNumeric(objFSO.GetBaseName(objFile.Name)) Then 
     objFSO.DeleteFile(objFile) 
    End If 
End If  
Next 
1

使用则IsNumeric()来检查包括全数字的文件名:

>> For Each sN In Split("abc 123 1O1 101") 
>>  If IsNumeric(sN) Then 
>>  WScript.Echo "delete", sN 
>>  Else 
>>  WScript.Echo "keep", sN 
>>  End If 
>> Next 
>> 
keep abc 
delete 123 
keep 1O1 
delete 101 

你的检查失败,因为你用左(),您应该使用MID():

>> collide = "ABCEDFGHIJKLMNOPQRSTUVWXYZ" 
>> num = 5 
>> WScript.Echo Left(collide,num) 
>> WScript.Echo Mid(collide,num,1) 
>> 
ABCED 
D 

即使Left(objFile.Name,1)只会查看文件名的第一个字符。

更新(WRT评论):

应用则IsNumeric()的基本名称:

Dim oFile 
    For Each oFile In goFS.GetFolder("..\testdata\17817161").Files 
     WScript.Stdout.Write oFile.Name 
     If "dbf" = LCase(goFS.GetExtensionName(oFile.Name)) Then 
     If IsNumeric(goFS.GetBaseName(oFile.Name)) Then 
      WScript.Stdout.WriteLine " delete" 
     Else 
      WScript.Stdout.WriteLine " keep" 
     End If 
     Else 
     WScript.Stdout.WriteLine " ignore" 
     End If 
    Next 

输出:

123.dbf delete 
123.txt ignore 
abc.dbf keep 
+0

我试过IsNumeric(),但是因为它有一个.dbf扩展名,所以它的错误。 Num被移动到数组中的下一个字母,而不是打印n个字母。此外,删除带来了一个不匹配的错误:/ –

+0

刚刚意识到我没有在if语句中称为数组的碰撞,我的道歉。 –

+0

第2行字符1,错误:对象需要'goFS'代码800A1A8来源:Microsoft VBScript运行时错误 –