OVH Cloud OVH Cloud

Suppression des espaces dans nom des fichiers

7 réponses
Avatar
Frédéric Prally
Bonjour à tous,

J'ai réalisé le code ci-dessous pour me permettre de supprimer, pour tous
les fichiers présents dans le dossier, les espaces qui sont compris dans le
nom des fichiers.

Ce code fonctionne bien jusqu'au 41 fichiers traités puis apparait le
message d'erreur suivant :
Script : C:\arcgis\FredDeveloppement\Sample_VBSCRIPT\SupprimeEspace.vbs
Ligne : 31
Caract. : 7
Erreur : Ce fichier existe déjà.
Code : 800A003A
Source : Erreur d'execution Microsoft VBScript

Si qq un peut me donner un coup de main pour voir ce qui ne va pas ?

Merci d'avance

Le code en question :

' -----------------------------------------------
' Supprime les espaces dans le nom des fichiers
' contenus dans un dossier
'
' Frédéric Prally Octobre 2005
' -----------------------------------------------
Dim fso,f,fc,f1
Dim path, Name, OldName, NewName, NewFile, Result
Dim folder
Dim countFile

Set fso = CreateObject("Scripting.FileSystemObject")
path = "C:\temp\NOTRE-DAME-DE-BLIQUETUIT_old"
set folder = fso.GetFolder(path)

'Vérifie l'existence du dossier
If (fso.FolderExists(folder)) Then
msgbox folder & " existe."
Else
msgbox folder & " n'existe pas."
End If

'Parcours Tous les fichiers contenu dans le dossier
set fc = folder.Files

For Each f1 in fc
oldName = f1.Name
wscript.Echo oldName
NewName = replace(oldName , " ", "")
set NewFile = fso.GetFile(path & "\" & oldName)
NewFile.Name = NewName
Next

wscript.Echo "Suppression des espaces"

7 réponses

Avatar
Georges MAUREL
Bonjour,
Il semblerait que vous ayez des fichiers qui, si on enlève les espaces, ont
le même nom
Ainsi, vous pouvez avoir :
a a.txt
a a.txt
Mais après avoir enlevé les espaces vous allez avoir :
aa.txt pour le premier
et vous ne pourrez pas renommer le second car aa.txt existe déjà

Voyez si vous ne pouvez pas remplacer les espaces par d'autres caractères...

Cordialement
Georges


"Frédéric Prally" a écrit dans le
message de news:
Bonjour à tous,

J'ai réalisé le code ci-dessous pour me permettre de supprimer, pour tous
les fichiers présents dans le dossier, les espaces qui sont compris dans
le
nom des fichiers.

Ce code fonctionne bien jusqu'au 41 fichiers traités puis apparait le
message d'erreur suivant :
Script : C:arcgisFredDeveloppementSample_VBSCRIPTSupprimeEspace.vbs
Ligne : 31
Caract. : 7
Erreur : Ce fichier existe déjà.
Code : 800A003A
Source : Erreur d'execution Microsoft VBScript

Si qq un peut me donner un coup de main pour voir ce qui ne va pas ?

Merci d'avance

Le code en question :

' -----------------------------------------------
' Supprime les espaces dans le nom des fichiers
' contenus dans un dossier
'
' Frédéric Prally Octobre 2005
' -----------------------------------------------
Dim fso,f,fc,f1
Dim path, Name, OldName, NewName, NewFile, Result
Dim folder
Dim countFile

Set fso = CreateObject("Scripting.FileSystemObject")
path = "C:tempNOTRE-DAME-DE-BLIQUETUIT_old"
set folder = fso.GetFolder(path)

'Vérifie l'existence du dossier
If (fso.FolderExists(folder)) Then
msgbox folder & " existe."
Else
msgbox folder & " n'existe pas."
End If

'Parcours Tous les fichiers contenu dans le dossier
set fc = folder.Files

For Each f1 in fc
oldName = f1.Name
wscript.Echo oldName
NewName = replace(oldName , " ", "")
set NewFile = fso.GetFile(path & "" & oldName)
NewFile.Name = NewName
Next

wscript.Echo "Suppression des espaces"




Avatar
Fred
Dans le message:,
Georges MAUREL écrit:
Bonjour,


Bonjour,

Il semblerait que vous ayez des fichiers qui, si on enlève les
espaces, ont le même nom



Oui, ou bien peut-être un fichier dont le nom ne contient pas d'espace.
J'ai eu le souci en testant un bout de script posté pour Dan dans le fil
«Comment parcourir des sous-répertoires» initié le 2/10 à 12h26.
La solution consiste à n'affecter NewName à la propriété Name que si
NewName est différent de OldName.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
Do Re Mi chel La Si Do
Bonsoir !

Yaka remplacer les espaces par des _

MCI
Avatar
Fred
Dans : news:%,
Do Re Mi chel La Si Do disait :
Bonsoir !


Bonsoir,

Yaka remplacer les espaces par des _


Oui, cela résout mon cas, mais pas celui évoqué par Georges.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
Do Re Mi chel La Si Do
Si :

aa.txt ==> aa.txt
a a.txt ==> a_a.txt
a a.txt ==> a__a.txt

Le risque, c'est plutôt celui que tu as, toi, décrit : a__a.txt existant
déjà, avant le traitement.

Mais, plutôt que de traiter le cas à la volée, s'il se présente, je
pencherais pour faire une passe de vérification préalable.

@-salutations

Michel Claveau
Avatar
Fred
Dans : news:%,
Do Re Mi chel La Si Do disait :
Si :

aa.txt ==> aa.txt
a a.txt ==> a_a.txt
a a.txt ==> a__a.txt

Le risque, c'est plutôt celui que tu as, toi, décrit : a__a.txt
existant déjà, avant le traitement.


Justement, c'est Georges qui décrit cela.
Moi je mentionne le problème facilement reproductible avec le petit
exemple suivant :
8<-----------------
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.GetFile("C:test.txt")
oFile.Name = "test.txt" 'Plantage : «le fichier existe déjà»
8<------------------
Autrement dit, l'instruction :
oFile.Name = Replace(oFile.Name, " ", car_quelconque)
plantera, dès lors qu'il n'y a pas d'espace dans le nom du fichier.
C'est un comportement un peu étrange à mon avis.

Mais, plutôt que de traiter le cas à la volée, s'il se présente, je
pencherais pour faire une passe de vérification préalable.


Dans ce genre de situation, j'utilise une méthode analogue à celle de
windows. Un truc du genre (à l'extension près) :
8<--------------------
nom = nombase
ndx = 0
While oFSO.FileExists(nom)
ndx = ndx + 1
nom = nombase & " (" & ndx & ")"
Wend
8<--------------------

@-salutations


Cordialement.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
Frédéric Prally
Bonjour à tous,

Vraiment désolé de ne pas avoir donné suite à vos réponses mais j'étais sur
le terrain.
Grâce à la réponse de Fred, j'ai résolu mon problème : il a suffit que je
mette une condition dans ma boucle à savoir si NewName est différent de
OldName alors suite de la procédure.

Encore merci à tous !!
'*********************************************
' -----------------------------------------------
' Supprime les espaces dans le nom des fichiers
' contenus dans un dossier
'
' Frédéric Prally Octobre 2005
' -----------------------------------------------
Dim fso,f,fc,f1
Dim path, Name, OldName, NewName, NewFile, Result
Dim folder
Dim countFile

Set fso = CreateObject("Scripting.FileSystemObject")
path = "C:tempNOTRE-DAME-DE-BLIQUETUIT"
set folder = fso.GetFolder(path)

'Vérifie l'existence du dossier
If (fso.FolderExists(folder)) Then
msgbox folder & " existe."
Else
msgbox folder & " n'existe pas."
End If

'Parcours Tous les fichiers contenu dans le dossier
set fc = folder.Files

For Each f1 in fc
oldName = f1.Name
wscript.Echo oldName
NewName = replace(oldName , " ", "")
if NewName <> oldName then
set NewFile = fso.GetFile(path & "" & oldName)
NewFile.Name = NewName
end if
Next

wscript.Echo "FIN ... Suppression des espaces"
set fc = nothing
set f1 = nothing
set NewFile = nothing

'*********************************************
Voici le code corrigé :




Dans : news:%,
Do Re Mi chel La Si Do disait :
Si :

aa.txt ==> aa.txt
a a.txt ==> a_a.txt
a a.txt ==> a__a.txt

Le risque, c'est plutôt celui que tu as, toi, décrit : a__a.txt
existant déjà, avant le traitement.


Justement, c'est Georges qui décrit cela.
Moi je mentionne le problème facilement reproductible avec le petit
exemple suivant :
8<-----------------
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.GetFile("C:test.txt")
oFile.Name = "test.txt" 'Plantage : «le fichier existe déjà»
8<------------------
Autrement dit, l'instruction :
oFile.Name = Replace(oFile.Name, " ", car_quelconque)
plantera, dès lors qu'il n'y a pas d'espace dans le nom du fichier.
C'est un comportement un peu étrange à mon avis.

Mais, plutôt que de traiter le cas à la volée, s'il se présente, je
pencherais pour faire une passe de vérification préalable.


Dans ce genre de situation, j'utilise une méthode analogue à celle de
windows. Un truc du genre (à l'extension près) :
8<--------------------
nom = nombase
ndx = 0
While oFSO.FileExists(nom)
ndx = ndx + 1
nom = nombase & " (" & ndx & ")"
Wend
8<--------------------

@-salutations


Cordialement.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT