2012-01-26 15 views
4

ファイルの名前を変更するためのvbscriptがあります。スクリプトに実装する必要があるのは、すでに存在する場合は「新しいファイル」を削除するものです。ファイルが存在する場合はファイルを削除してください

例:私は11111111.dddddddd.pdfのような名前のファイルのバッチを持ち、ファイルの名前は11111111.pdfに変更されます。問題は、11111111.pdf形式に名前を変更すると、重複しているファイルで終わり、明らかに同じ名前のファイルが2つあるためにスクリプトが失敗するということです。私はそれを最初の名前を変更する必要がありますが、同じ名前が変更された他のものを削除します。

これまで私のIFステートメントでこれまでに行ってきたことはありますが、それはうまくいかず、「タイプミスマッチ:FileExists」というエラーが表示されます。私は、コードのこの部分を私が望むやり方で実行する方法を確かめていません。どんな助けや提案も大歓迎です。

dim infolder: set infolder = fso.GetFolder(IN_PATH) 
dim file 
for each file in infolder.files 

dim name: name = file.name 
dim parts: parts = split(name, ".") 
dim acct_, date_ 
acct_ = parts(0) 
date_ = parts(1) 


' file format of a.c.pdf 
if UBound(parts) = 2 then 
    ' rebuild the name with the 0th and 2nd elements 
    dim newname: newname = acct_ & "." & parts(2) 
    ' use the move() method to effect the rename 
    file.move fso.buildpath(OUT_PATH, newname) 

    if newname = FileExists(file.name) Then    
    newname.DeleteFile() 
    end if 
end if 

next 'file 

答えて

12

あなたは近いうちに、のファイルを削除してから、それを上書きしようとします。あなたの応答のための

dim infolder: set infolder = fso.GetFolder(IN_PATH) 
dim file: for each file in infolder.Files 

    dim name: name = file.name 
    dim parts: parts = split(name, ".") 

    if UBound(parts) = 2 then 

     ' file name like a.c.pdf  

     dim newname: newname = parts(0) & "." & parts(2) 
     dim newpath: newpath = fso.BuildPath(OUT_PATH, newname) 

     ' warning: 
     ' if we have source files C:\IN_PATH\ABC.01.PDF, C:\IN_PATH\ABC.02.PDF, ... 
     ' only one of them will be saved as D:\OUT_PATH\ABC.PDF 

     if fso.FileExists(newpath) then 
      fso.DeleteFile newpath 
     end if 

     file.Move newpath 

    end if 

next 
+0

Salman A-私はそれが単純なものでなければならないことを知っていました。私はすべてそれを上に取り組んだし、まっすぐ考えていませんでした。魅力のように動作します。とても有難い。 –

4

fileExists()FileSystemObjectの方法ではなく、グローバルスコープの関数です。

また、削除に問題があります。DeleteFile()は、FileSystemObjectの方法でもあります。

さらに、ファイルを移動してから上書きの問題に対処しようとしているようですが、これは不正常です。まず、名前の衝突を検出する必要があるため、ファイルの名前を変更するか、最初に衝突を削除するかを選択できます。私は何らかの理由であなたがあなたの質問に暗示されているように最後のものになるまで、新しいファイルを削除し続けたいと思っています。

だからあなたはブロックを使用することができます。

if NOT fso.FileExists(newname) Then 

    file.move fso.buildpath(OUT_PATH, newname)   

else 

    fso.DeleteFile newname 
    file.move fso.buildpath(OUT_PATH, newname) 

end if 

=記号を使用して文字列の比較は大文字と小文字が区別されることに注意してください。大文字と小文字を区別しない文字列比較の場合は、とvbTextの比較オプションを使用してください。

+0

感謝。私もこれを試して、それは動作します。 –

1
IF both POS_History_bim_data_*.zip and POS_History_bim_data_*.zip.trg exists in Y:\ExternalData\RSIDest\ Folder then Delete File Y:\ExternalData\RSIDest\Target_slpos_unzip_done.dat 
関連する問題