RENAME avec wildcards

Résolu
mike_vk Messages postés 30 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 13 septembre 2013 - 2 janv. 2008 à 15:43
mike_vk Messages postés 30 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 13 septembre 2013 - 3 janv. 2008 à 11:55
Bonjour,
J'ai un petit problème avec la commande RENAME. Peut-etre que j'utilise pas bien les wildcards?

Je dispose d'un dossier contenant une série de fichiers ayant tous comme nom :
prefixe_nomfichier.ext
où prefixe est identique pour tous les fichiers.

J'essaie de modifier ce préfixe avec RENAME, pour tous les fichiers en une fois,
comme ceci par exemple :
RENAME "prefixe*.*" TO "prefix2*.*"

Tout va bien quand les deux prefixes ont la même longueur. Mais quand le nouveau est un caractère plus long que l'ancien, il écrase l'underscore. Si le nouveau est plus court, il laisse des caractères de l'ancien!
Introduire le _ dans la variable contenant le préfixe ou même dans le masque du RENAME, ne change rien.
Quelqu'un aurait-il une idée ? J'espère m'être bien exprimé,
Merci beaucoup

pYTh

1 réponse

mike_vk Messages postés 30 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 13 septembre 2013
3 janv. 2008 à 11:55
Ne trouvant pas de solution à ce problème, et ayant vu que pas mal de monde s'est retrouvé face à la même impasse, j'ai codé une petite fonction qui modifie le préfixe de tous les fichiers d'un dossier.
Voici le code, les commentaires et améliorations sont les bienvenues!

FUNCTION

RenameFilePrefixes(cDir,cOld,cNew)
   LOCAL cFileName, cRightPart
   IF(DIRECTORY(cDir) .AND. !EMPTY(cOld) .AND. !EMPTY(cNew) .AND. cOld!=cNew)
      SET DEFAULT TO "&cDir"
      cFileName = SYS(2000,cOld+"*.*")
      DO WHILE( !EMPTY(cFileName) )

         IF( LEN(cNew) > LEN(cOld) ) && Empeche les boucles infinies quand le
            DO WHILE( !EMPTY(cFileName) .AND. ; && nouveau préfixe commence
                      cNew = LEFT(cFileName,LEN(cNew)) ) && par l'ancien
               cFileName = SYS(2000,cOld+"*.*",1)
            ENDDO
         ENDIF

         IF( !EMPTY(cFileName) )
            cRightPart = SUBSTR(cFileName,LEN(cOld)+1)
            RENAME "&cOld"+"&cRightPart" TO "&cNew"+"&cRightPart" && Renomme
            cFileName = SYS(2000,cOld+"*.*") && Fichier suivant
         ENDIF

      ENDDO
      SET DEFAULT TO
      RETURN .T.
   ELSE
      RETURN .F.
   ENDIF
ENDFUNC
3
Rejoignez-nous