Renommage de fichiers en série dans même rép

Patrick -  
jisisv Messages postés 3678 Statut Modérateur -
Bonjour à tous.

Je ne suis pas un analyste-développeur mais j'ai un grand besoin dans le cadre de mon stage dans les réseaux.

Voila mon besoin, faire 2 programmes sous WINDOWS :

Prog 1 : Renommer des fichiers avec comme noms "067xxxxx.000" (où xxxxx sont des numéros quelconques) en noms "06710767000xxxxx.TXT" (les xxxxx ne changent pas, 10767000 sont des champs obligatoires à ajouter, l'extension 000 change en TXT)

Prog 2 : Renommer des fichiers avec comme noms "06710767000xxxxx_CR.TXT" (xxxxx sont des numéros quelconques) en noms "AAMMJJxx" (date du jour inversé suivi de seulement les deux derniers "x").

Bref, il n'y a que pratiquement que des chiffres dans les noms de fichiers.

C'est un programme-batch, une espèce d'automatisation dès qu'on lance le programme manuellement quoi.

C'est pour renommer des fichiers en blocs (une dizaine par jour) dans un même répertoire. Cela évite de devoir renommer tous ces fichiers un par un avec le clic droit et le clavier.... En plus, ces fichiers seront mieux archivés grâce à la date du jour dans le nom "AAMMJJxx".

On peut utiliser n'importe quel langage compatible avec Windows et sa structure de fichiers. Si quelqu'un pouvait m'aider ce serait vraiment hyper génial !! (Pour le stage et pour moi aussi car ça m'intéresse aussi pour la maison dans mes répertoires).

C'est possible sous Windows tout ça ?? Et comment faire ? Help !!.... Au secours à tous.

Je remercie d'avance les personnes qui auraient l'amabilité et la bonté de m'aider. Je leur serais très très reconnaissant !! M'aider m'aider......

Merci de me répondre à :
plam@webmails.com
plam@caramail.com

Patrick.

2 réponses

  1. phil63
     
    salut
    je t'ais bricolé ça... à rajouter dans un module vb sous excel et en rajoutant
    2 boutons associés à main1() et à main2().
    sauvegarde ensuite le .xls dans le rep à traiter (fait d'abord un rep de test !)
    nécessite surement des ajustements, le code me semble lisible.

    Function renommer1(sourcefic$) As String

    Dim fichier$, sufix$, milieu$, prefix$, fin$

    fin$ = ".000"
    sufix$ = ".txt"
    milieu$ = "10767000"
    prefix$ = "067"
    If (Left(sourcefic$, 3) = prefix$) And (Right(sourcefic$, 4) = fin$) Then
    fichier$ = prefix$ + milieu$ + Mid(sourcefic$, 4, 5) + sufix$
    End If
    renommer1 = fichier$

    End Function

    Function renommer2(sourcefic$) As String

    Dim fichier$, sufix$, prefix$

    datedujour$ = Str(Date)
    datedujour$ = Right(datedujour$, 2) + Mid(datedujour$, 4, 2) + Left(datedujour$, 2)
    Debug.Print datedujour$
    sufix$ = "_CR.txt"
    prefix$ = "06710767000"
    If (Left(sourcefic$, 11) = prefix$) And (Right(sourcefic$, 7) = sufix$) Then
    fichier$ = datedujour$ + Mid(sourcefic$, 15, 2) + sufix$
    End If
    renommer2 = fichier$

    End Function

    Sub main1()

    Dim x$

    x$ = Dir("*.000")
    While x$ <> ""
    ' Debug.Print x$
    Name x$ As renommer1(x$)
    x$ = Dir$
    Wend
    End Sub

    Sub main2()

    Dim x$

    x$ = Dir("*_CR.txt")
    While x$ <> ""
    Debug.Print x$
    Name x$ As renommer2(x$)
    x$ = Dir$
    Wend

    End Sub

    Private Sub CommandButton1_Click()
    Call main1
    End Sub

    Private Sub CommandButton2_Click()
    Call main2
    End Sub
    0
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    Une bonne solution serait d'installer Python, le langage script orienté objet multi-plateformes.
    Voir par exemple
    http://www.python.org/2.2/

    Attention les tabulations merdent probablement ? cause du textarea....

    #!/usr/bin/python
    import sys
    import os
    import re
    import time

    def proc1(rep) :

    #Renommer des fichiers avec comme noms "067xxxxx.000" (o? xxxxx sont des numéros quelconques) en noms "06710767000xxxxx.TXT" (le
    s xxxxx ne changent pas, 10767000 sont des champs obligatoires ? ajouter, l'extension 000 change en TXT)

    files = os.listdir(rep)
    reg1 = re.compile("^067(.....)\.000")

    for file in files :
    if ( reg1.match(file)) :
    file2 = reg1.sub( "06710767000\\1.TXT", file)
    try:
    os.rename(file, file2)
    except():
    print "Could not rename %s to %s" %(file,file2)
    print "%s --> %s" % (file, file2)

    def proc2(rep) :
    #Renommer des fichiers avec comme noms "06710767000xxxxx_CR.TXT" (xxxxx sont des numéros quelconques) en noms "AAMMJJxx" (date du
    jour inversé suivi de seulement les deux derniers "x").
    files = os.listdir(rep)

    reg1 = re.compile("^06710767000...(..)_CR.TXT")

    for file in files :
    if ( reg1.match(file)) :
    tmp = time.time()
    file2 = reg1.sub("\\1", file)
    timeparts = time.localtime(time.time())
    file2 = file2 + time.strftime("%y%m%d", timeparts )
    try:
    os.rename(file, file2)
    except():
    print "Could not rename %s to %s" %(file,file2)
    print "%s --> %s" % (file, file2)

    ##############################################
    if __name__ == '__main__':
    if (len(sys.argv) > 1) :
    proc1(sys.argv[1])
    proc2(sys.argv[1])

    Allways close to Open Source...
    Johan Daine
    0