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
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
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.
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