web-dev-qa-db-fra.com

Si le fichier existe, supprimez le fichier

J'ai un vbscript qui est utilisé pour renommer des fichiers. Ce que je dois implémenter dans le script est quelque chose qui supprime le "nouveau fichier" s'il existe déjà. 

Par exemple: J'ai un lot de fichiers nommés comme ceci 11111111.ddddddddd.pdf où les fichiers sont renommés en 11111111.pdf. Le problème est que lorsque je renomme le format 11111111.pdf, je termine avec les fichiers dupliqués, puis le script échoue car vous ne pouvez évidemment pas avoir 2 fichiers portant le même nom. J'en ai besoin pour renommer le premier, puis supprimer les autres renommés. 

Voici ce que j’ai jusqu’à présent pour mon instruction IF, mais cela ne fonctionne pas et j’obtiens une erreur qui indique "Incompatibilité de type:" FileExists ". Je ne sais pas comment faire en sorte que cette partie du code s'exécute comme je le souhaiterais. Toute aide ou suggestion serait grandement appréciée.

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
6
CLO_471

Vous êtes proche, il vous suffit de supprimer le fichier avant pour essayer de l'écraser. 

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
13
Salman A

fileExists() est une méthode de FileSystemObject, pas une fonction de portée globale.

Vous avez également un problème avec la suppression, DeleteFile() est également une méthode de FileSystemObject.

En outre, il semble que vous déplaciez le fichier et tentiez ensuite de résoudre le problème de réécriture, ce qui est irrecevable. Vous devez d’abord détecter la collision de noms afin de pouvoir choisir de renommer le fichier ou de supprimer la collision en premier. Je suppose que, pour une raison quelconque, vous souhaitez continuer à supprimer les nouveaux fichiers jusqu'à ce que vous arriviez au dernier, ce qui semblait implicite dans votre question.

Pour que vous puissiez utiliser le bloc:

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 

Veillez également à ce que votre comparaison de chaînes avec le signe = respecte la casse. Utilisez strCmp avec vbText comparer pour la comparaison de chaînes sans distinction de casse.

4
3martini
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
1
Poonam