2013-07-23 141 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運行時錯誤 –