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 

还要注意你的字符串与=符号的比较是区分大小写的。使用strCmpwith vbTextcompare 选项进行不区分大小写的字符串比较。

于 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 回答