如果文件存在,则删除该文件。

8
我有一个vbscript用于重命名文件。我需要在脚本中实现的功能是,如果“新文件”已经存在,则删除它。
例如:我有一批文件,它们的名称类似于11111111.dddddddd.pdf,其中文件被重命名为11111111.pdf。问题是当我重命名到11111111.pdf格式时,我结束了与相同名称的文件重复,并使脚本失败,因为显然不能有两个同名的文件。我需要重命名第一个文件,然后删除其他重命名为相同名称的文件。
以下是我所拥有的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
3个回答

15

你已经很接近了,你只需要在试图覆盖它之前删除文件即可

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

Salman A- 我知道这一定是一些简单的东西。我为此而激动不已,思路也不清晰。现在完美地运行了。非常感谢。 - CLO_471

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比较选项的strCmp进行不区分大小写的字符串比较。


谢谢您的回复。我也测试了一下,它可以正常工作。 - CLO_471

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接