IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Récupérer un fichier unique d'après son extension


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Récupérer un fichier unique d'après son extension
    Bonjour à tous !

    Je souhaite pouvoir récupérer le nom d'un fichier (pour utilisation en pièce jointe d'un email). qui ce trouve dans un répertoire prédéfini.

    Jusqu'à là, je n'ai pas de souci. Cela-dit, le nom du fichier que je dois récupérer change lors que chaque génération (depuis une application tierce).

    Les seules info qui sont constantes sont : le début du nom et l'entension ".txt", sachant qu'il n'y peut avoir qu'un seul fichier .txt dans le répertoire en même temps. (puisque archivage dans la suite du script).

    Il est évident que des méthodes telles que *.txt ne sont pas valables alors dans l'absolu, j'ai pensé bouclé et pendant la séquence renommer ce fichier avec une autre extension. Mais cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
     
    Set FileList = objWMIService.ExecQuery _
        ("ASSOCIATORS OF {Win32_Directory.Name='c:\'} Where " _
            & "ResultClass = CIM_DataFile")
     
    DestFile "Test.xss"
     
     
    For Each objFile In FileList
        strDate = Right(objFile.Name, 3)
        If strDate = "txt" Then 
        objFile.Rename(DestFile)
    	    End If
    Set objFile = Nothing	    
    Next
    Ni d'ailleurs avec cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
     
    Set FileList = objWMIService.ExecQuery _
        ("ASSOCIATORS OF {Win32_Directory.Name='c:\'} Where " _
            & "ResultClass = CIM_DataFile")
     
     
    For Each objFile In FileList
        If objFile.Extension = "txt" Then
            strNewName = "test" & Day(Date) & ".txt"
     
             errResult = objFile.Rename(strNewName)
        End If
    Next
    J'espère que quelqu'un pourra m'aider.

    Merci d'avance.

    John

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 225
    Points
    9 225
    Par défaut
    essaye comme ceci et dis moi le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each objFile In FileList
    Set fso = createObject("Scripting.FileSystemObject")
    If Ucase(fso.GetExtensionName(objFile.Name))="TXT" Then
    'Instructions 
    end if
    Next

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Hello merci pour ta réponse

    Cela-dit, j'ai une erreur d'exécution avec la ligne ...If Ucase.... :

    Objet requis: "
    Code: 800A01A8

    Sachant que le fichier (de test) se trouvant à la racine de mon C:\ se nomnme "Copie.txt" et que je souhaite le renommer en "Test.xss".

    J'ai adapté comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
     
    Set FileList = objWMIService.ExecQuery _
        ("ASSOCIATORS OF {Win32_Directory.Name='c:\'} Where " _
            & "ResultClass = CIM_DataFile")
     
    DestFile = "Test.xss"
    For Each objFile In FileList
    If Ucase(fso.GetExtensionName(objFile.Name))="TXT" Then
        objFile.Rename(DestFile)
    end if
    Next
    Il y a certainement une erreur de syntaxe

  4. #4
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 225
    Points
    9 225
    Par défaut
    Il vous manque cette ligne pour la création de l'objet fso:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fso = createObject("Scripting.FileSystemObject")
    et pour le renommage des fichiers il faut voir la Comment déplacer,renommer un fichier ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Résolu
    J'y crois pas ! il faut que je dorme un peu moi... en effet, l'oubli ne pardonne pas

    Je me suis donc inspiré de Hakoofr + faq et en définitif cela donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each objFile In FileList
    Set fso = createObject("Scripting.FileSystemObject")
    If Ucase(fso.GetExtensionName(objFile.Name))="TXT" Then
    FSO.MoveFile (objFile.Name),"c:\Test.xss"
    end if 
    Next
    MERCI pour l'aide !

  6. #6
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 417
    Points : 5 816
    Points
    5 816
    Par défaut
    For Each objFile In FileList
    Set fso = createObject("Scripting.FileSystemObject")
    If Ucase(fso.GetExtensionName(objFile.Name))="TXT" Then
    FSO.MoveFile (objFile.Name),"c:\Test.xss"
    end if
    Next
    Pourquoi créer à chaque itération l'objet FSO ?
    Il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FSO.MoveFile (objFile.Path),"c:\Test.xss"
    De plus, Chaque fichier .txt va être déplacé et écrase ton fichier "C:\Test.xss".
    Je suggère l'ajout d'un indice numérique pour conserver les différentes copies si tu en as besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Option Explicit
    Dim fso, objFile, Ind, objFolder, FileList
     
     Set fso = createObject("Scripting.FileSystemObject")
     Set FileList = fso.GetFolder("C:\User")
     
     For Each objFile In FileList.Files
       If Ucase(fso.GetExtensionName(objFile.Name))="TXT" Then
          FSO.MoveFile (objFile.Path),"C:\D_USER\Test" & CStr(GetLastFileIndex(objFile.Path)+1) & ".xss"
       End If
     Next
     Function GetLastFileIndex(strFile)
      Dim NewIndex(30),I,Ret
      I=-1
      For Each objFile In fso.GetFolder("C:\D_USER\").Files
         On Error Resume Next
         I = I + 1
    	 Ret=fso.GetBaseName(objFile.Name)
    	 NewIndex(I) = Mid(Ret,5,Len(Ret))
      Next	 
       If Mid(Ret,5,Len(Ret))="" Then 
            GetLastFileIndex = 0
       Else
            GetLastFileIndex = NewIndex(I)
       End If		
     End Function

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Oui effectivement, c'est une bonne idée, mais dans mon cas, il n'y aura qu'un seul fichier .txt dans le répertoire définit car dans la suite de mon script, je l'utilise et ensuite l'archive dans un autre répertoire.

    Mais effectivement s'il en avait plusieurs et qu'il y aurait d'autres fichiers, cela me poserait de sérieux problème avec le code que j'ai posté.

    Merci pour l'aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Renommer fichier uploadé et conserver son extension
    Par E. Nigma dans le forum Langage
    Réponses: 3
    Dernier message: 01/08/2014, 19h15
  2. lancer un fichier en fonction de son extension
    Par nekcorp dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 09/09/2009, 14h26
  3. Récupérer le nom d'un fichier sans son extension
    Par Shoot dans le forum Langage
    Réponses: 5
    Dernier message: 09/04/2008, 09h32
  4. Réponses: 2
    Dernier message: 14/11/2005, 18h25
  5. [Tableaux] Séparer un nom de fichier de son extension
    Par Empty_body dans le forum Langage
    Réponses: 5
    Dernier message: 24/03/2005, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo