7

ファイルの名前を変更するために使用される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
4

3 に答える 3

14

近くにいます。ファイルを上書きする前に、ファイルを削除するだけです。

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
于 2012-01-26T07:30:16.957 に答える
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 

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

于 2012-01-26T07:10:10.367 に答える
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
于 2012-11-05T16:28:58.123 に答える