2012-05-25 52 views
0

我有一堆我每週收到一次的PDF文件。如何修復文件擴展名並在修復後移動文件?

其中一些文件的擴展名有誤或者根本沒有。

有時,它就像file1.pdd,file.ptf等

下面的腳本應該經歷的所有文件尋找那些沒有.pdf擴展。

如果發現任何問題,請使用正確的擴展名修復它。

例如,代碼應該已將filed.pdd更改爲file1.pdf。

修復擴展名後,將文件移動到其他位置。

它沒有修復擴展名,也沒有移動文件。

任何幫助,非常感謝。

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set pdfFolder = FSO.GetFolder("C:\Folder1\Subfolder\") 

For Each fil In pdfFolder.Files 
    ' check each file to be sure it fits the pattern 
    fname = fil.Name 
    suffix = LCase(Right(fname, 4)) 
    prefix = Left(fname, 8) 
    ' so suffix has to be right, prefix has to have two slashes, and prefix has to be a date: 
    If UBound(Split(prefix,"/")) = 2 AND IsDate(prefix) AND suffix = ".pdf" Then 
     newName = Mid(fname, 9) 
     ' Response.Write "Renaming '" & fname & "' to '" & newName & "'<br/>" & vbNewLine 
     fil.Move "E:\Folder2\Fixed\" & newName 
    End If 
Next 

回答

1

此代碼應解決您的問題:

Set Fso = CreateObject("Scripting.FileSystemObject") 
Set PdfFolder = Fso.GetFolder("C:\Folder1\Subfolder\") 
For Each x In PdfFolder.Files 
    Fname = x.Name 
    If LCase(Right(Fname, 4)) <> ".pdf" Then 
     Fso.MoveFile Fname, "E:\Folder2\Fixed\" & Fso.GetBaseName(Fname) & ".pdf" 
    End If 
Next 

我希望我幫助。

+0

+1使用.GetBaseName,-1沒有使用.GetExtensionName,+1是第一個。 –

+0

嗨rjjj,你的不幸,也不管用。它沒有修復擴展名,也沒有移動任何文件。 –

1

不是把文件規範只是另一個字符串,則應該使用FileSystemObject的專門的方法:

Option Explicit 
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 
Dim aTests : aTests = Array(_ 
    "good.pdf" _ 
    , "pddext.pdd" _ 
    , "ucase.PDf" _ 
    , "noext" _ 
    , "more tests please.pdf" _ 
) 
Dim sTest 
For Each sTest In aTests 
    WScript.Echo " ", qq(sTest) 
    WScript.Echo "=>", qq(goFS.GetBaseName(sTest) & ".pdf") 
Next 

Function qq(sText) 
    qq = """" & sText & """" 
End Function 

輸出:

cscript 02.vbs 
    "good.pdf" 
=> "good.pdf" 
    "pddext.pdd" 
=> "pddext.pdf" 
    "ucase.PDf" 
=> "ucase.pdf" 
    "noext" 
=> "noext.pdf" 
    "more tests please.pdf" 
=> "more tests please.pdf" 
+0

Ekkehard,謝謝,但我該如何使用它? 特別是數組?我是針對駐留在服務器上的目錄中的文件的腳本。 –

+0

@ChidiOkeh在看過.GetBaseName()的演示之後,您可以在VBScript Docs中查找這些方法和它的表兄弟,重寫您的容易出錯的條件,測試時對重命名有一定的信心,然後解決「有沒有'On Error Resume Next'active?「,」是否正確?「,」訪問權限怎麼樣?「。 –

+0

謝謝你們。我通過刪除前綴位來修正我的原始代碼,該代碼看起來與代碼無關。 現在,它的工作。感謝你們的迴應。 –