我有一个用于重命名文件的vbscript。我需要在脚本中实现的是删除“新文件”(如果它已经存在)。
例如:我有一批名为11111111.ddddddd.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
答案 0 :(得分:13)
你已经关闭了,你只需要在尝试覆盖它之前删除文件。
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
答案 1 :(得分: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
另外请注意,与=
符号的字符串比较区分大小写。使用strCmp
和vbText
比较选项进行不区分大小写的字符串比较。
答案 2 :(得分: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