Если файл существует, удалите файл - PullRequest
6 голосов
/ 26 января 2012

У меня есть 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

Ответы [ 3 ]

13 голосов
/ 26 января 2012

Вы близки, вам просто нужно удалить файл перед тем, как попытаться перезаписать его.

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
4 голосов
/ 26 января 2012

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 опцией сравнения для сравнения строк без учета регистра.

1 голос
/ 05 ноября 2012
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
...