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

Scripts/Batch Discussion :

Remplacer espaces par underscores dans noms de fichiers [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut Remplacer espaces par underscores dans noms de fichiers
    Bonjour à tous,

    J'ai environ 500 documents PDF avec des noms à rallonge pour lesquels il faut que je remplace tous les espaces par des underscores. Comme je n'ai aucune envie de faire ça manuellement, j'ai cherché une solution pour pouvoir m'épargner cette tâche, et ai trouvé ceci.

    Le problème, c'est que ça ne marche pas, et comme je ne connais malheureusement rien à ces scripts, je ne vois pas ce qui bloque Pour info, j'ai essayé en testant sur d'autres fichiers (histoire de pas faire de bêtise sur les importants). J'ai créé un dossier test, avec dedans deux fichiers PDF "Test 1" et "Test 2", j'y ai placé le fichier batch nommé "Batch test", et tout ce qui se passe lorsque je l'exécute, c'est que le fichier batch passe de "Batch test" à "Batchtest".

    J'ai donc grand besoin d'aide, parce que le renommage de docs manuellement un par un... enfin vous voyez quoi

    Merci beaucoup d'avance

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    essaye ça en remplaçant "<chemin_d'accès>" par le chemin d'accès du répertoire a traiter.

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    setlocal enabledelayedexpansion
     
    for /r "<chemin_d'accès>" %%a in (*.pdf) do (
      set "path=%%~a"
      set "path=!path: =_!"
      copy /v "%%~a" "!path!"
      del /q "%%~a"
    )
    pause
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  3. #3
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    Désolée, ça ne marche pas non plus Ca me retourne une erreur "Le chemin d'accès spécifié est introuvable. 0 fichier(s) copié(s)", écrite deux fois vu qu'il y a deux fichiers PDF dans le dossier de test (j'ai testé, avec quatre fichier l'erreur est retournée quatre fois).

    Est ce que je me trompe dans la syntaxe pour écrire le chemin d'accès ?

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    setlocal enabledelayedexpansion
     
    for /r "C:\Users\Moi\Documents\Dossier test" %%a in (*.pdf) do (
      set "path=%%~a"
      set "path=!path: =_!"
      copy /v "%%~a" "!path!"
      del /q "%%~a"
    )
    pause

    EDIT : j'ai oublié de préciser qu'avec le lancement du batch, les deux fichiers PDF disparaissent du dossier ! Heureusement que c'était du test

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 843
    Par défaut

    Une autre solution en Vbscript mais pas encore complète, juste affichage du résultat avec msgbox donc à essayer avec un dossier test
    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
    Option Explicit
    Dim fso,MonDossier,File,MyNewFile
    Set fso = CreateObject("Scripting.FileSystemObject")
    MonDossier = Parcourir_Dossier()
    Set MonDossier = fso.GetFolder(MonDossier)
    For each File in MonDossier.Files
        Msgbox File
        MyNewFile = Replace(File," ","_")
        Msgbox MyNewFile
    Next
    '*********************************************************************************************
    Function Parcourir_Dossier()
        Dim objShell,objFolder,Message
        Message = "Veuillez sélectionner un dossier pour renommer ses fichiers avec underscrore"
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.BrowseForFolder(0,Message,1,"c:\Programs")
        If objFolder Is Nothing Then
            Wscript.Quit
        End If
        Parcourir_Dossier = objFolder.self.path
    end Function
    '*********************************************************************************************

  5. #5
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 843
    Par défaut

    Voici la solution complète en Vbscript
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Option Explicit
    Dim fso,ws,MonDossier,File,MyNewFile
    set ws = CreateObject("wscript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    MonDossier = Parcourir_Dossier()
    Set MonDossier = fso.GetFolder(MonDossier)
    For each File in MonDossier.Files
        MyNewFile = Replace(File," ","_")
        MyNewFile = GetNameFile(MyNewFile)
        Call RenameMyFile(File,MyNewFile)
    Next
    MsgBox "L'oprération est finie !",VbInformation,"L'oprération est finie !"
    ws.run "explorer.exe "& DblQuote(MonDossier)
    '*********************************************************************************************
    Function Parcourir_Dossier()
        Dim objShell,objFolder,Message
        Message = "Veuillez sélectionner un dossier pour renommer ses fichiers avec underscrore"
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.BrowseForFolder(0,Message,1,"c:\Programs")
        If objFolder Is Nothing Then
            Wscript.Quit
        End If
        Parcourir_Dossier = objFolder.self.path
    end Function
    '*********************************************************************************************
    Function GetNameFile(sFile)
        Dim  Tab
        Tab = Split(sFile,"\")
        GetNameFile = Tab(UBound(Tab))
    End Function
    '*********************************************************************************************
    Sub RenameMyFile(File1,File2)
        Dim Ws,Command,Execution
        Set Ws = CreateObject("WScript.Shell")
        Command = "Cmd /c Rename "& DblQuote(File1) &" "& DblQuote(File2) &""
        Execution = Ws.Run(Command,0,False)
    End Sub
    '*********************************************************************************************
    Function DblQuote(Str)
        DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '*********************************************************************************************

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Billets dans le blog
    2
    Par défaut
    Non tu ne t'es pas trompé dans le chemin d'accès, j'avais pas pris en compte le faite qu'il pouvait y avoir des espaces dans ton chemin d'accès. Tu doit avoir un dossier "C:\Users\Moi\Documents\Dossier_test" qui a dût être créé, pense à le supprimer.

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    setlocal enabledelayedexpansion
     
    for /r "C:\Users\Moi\Documents\Dossier test" %%a in (*.pdf) do (
      set "path=%%~nxa"
      set "path=!path: =_!"
      copy /v "%%~a" "%%~dpa!path!"
      del /q "%%~a"
    )
    pause

    @hackoofr: petit gourmand
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  7. #7
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    Merci beaucoup à tous les deux pour votre aide... mais ça ne va toujours pas Désolée en plus je ne fais pas avancer les choses, c'est quasiment la première fois que j'utilise des batch et vbscript On peut dire que je découvre leur existence justement parce que je cherchais à éviter un travail long et répétitif.


    Pour la solution de hackoofr : j'ai bien une fenêtre qui s'ouvre et me demande de sélectionner un dossier. Je prends le dossier de test, mais alors j'ai juste une autre fenêtre qui s'ouvre avec le chemin d'accès du premier document affiché et un bouton "OK". Je clique, re-fenêtre avec le chemin d'accès, je re-clique, fenêtre avec le chemin d'accès du deuxième doc...

    Pour la solution de InitSreen : le PDF "Test 1" a disparu du dossier de test, mais "Test 2" s'est bien transformé en "Test_2".


    En espérant que vous aurez encore la patience de vous pencher sur mon problème...

  8. #8
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Billets dans le blog
    2
    Par défaut
    Essaye comme ça, peut être ...

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
    setlocal enabledelayedexpansion
     
    for /r "C:\Users\Moi\Documents\Dossier test" %%a in (*.pdf) do (
      set "path=%%~nxa"
      set "path=!path: =_!"
      move /y "%%~a" "%%~dpa!path!"
    )
    pause

    ça devrait marcher, problème d'écriture décalé avec la commande copy
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  9. #9
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    Ca marche !!! Un grand merci soulagé, j'avais vraiment pas envie de faire ça document par document

    Merci à tous les deux d'avoir pris le temps de chercher la solution

  10. #10
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Billets dans le blog
    2
    Par défaut
    Met le post en résolut alors. Et de rien c'est un plaisir de faire du script ...
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  11. #11
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    C'est fait

  12. #12
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 843
    Par défaut
    Citation Envoyé par Ysae68 Voir le message
    Pour la solution de hackoofr : j'ai bien une fenêtre qui s'ouvre et me demande de sélectionner un dossier. Je prends le dossier de test, mais alors j'ai juste une autre fenêtre qui s'ouvre avec le chemin d'accès du premier document affiché et un bouton "OK". Je clique, re-fenêtre avec le chemin d'accès, je re-clique, fenêtre avec le chemin d'accès du deuxième doc...
    Parce que tu as cliqué plusieurs fois sur le script, voici une petite mise à jour, pour lancer une seule instance du script, en attendant d'ajouter une barre d'attente
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Option Explicit
    If AppPrevInstance() Then 
        MsgBox "Attention ! Il ya déjà une instance lancé !" & VbCrLF &_
        CommandLineLike(WScript.ScriptName),VbExclamation,"Attention ! Il ya déjà une instance lancé !"    
        WScript.Quit   
    Else 
    Dim fso,ws,MonDossier,File,MyNewFile
    set ws = CreateObject("wscript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    MonDossier = Parcourir_Dossier()
    Set MonDossier = fso.GetFolder(MonDossier)
    For each File in MonDossier.Files
        MyNewFile = Replace(File," ","_")
        MyNewFile = GetNameFile(MyNewFile)
        Call RenameMyFile(File,MyNewFile)
    Next
    MsgBox "L'oprération est finie !",VbInformation,"L'oprération est finie !"
    ws.run "explorer.exe "& DblQuote(MonDossier)
    End If
    '*********************************************************************************************
    Function Parcourir_Dossier()
        Dim objShell,objFolder,Message
        Message = "Veuillez sélectionner un dossier pour renommer ses fichiers avec underscrore"
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.BrowseForFolder(0,Message,1,"c:\Programs")
        If objFolder Is Nothing Then
            Wscript.Quit
        End If
        Parcourir_Dossier = objFolder.self.path
    end Function
    '*********************************************************************************************
    Function GetNameFile(sFile)
        Dim  Tab
        Tab = Split(sFile,"\")
        GetNameFile = Tab(UBound(Tab))
    End Function
    '*********************************************************************************************
    Sub RenameMyFile(File1,File2)
        Dim Ws,Command,Execution
        Set Ws = CreateObject("WScript.Shell")
        Command = "Cmd /c Rename "& DblQuote(File1) &" "& DblQuote(File2) &""
        Execution = Ws.Run(Command,0,False)
    End Sub
    '*********************************************************************************************
    Function DblQuote(Str)
        DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '*********************************************************************************************
    Function AppPrevInstance()   
        With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")   
            With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
                " AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")   
                AppPrevInstance = (.Count > 1)   
            End With   
        End With   
    End Function    
    '*********************************************************************************************
    Function CommandLineLike(ProcessPath)   
        ProcessPath = Replace(ProcessPath, "\", "\\")   
        CommandLineLike = "'%" & ProcessPath & "%'"   
    End Function
    '*********************************************************************************************

  13. #13
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    Ah non, négatif : j'ai fait un clic droit dessus, puis "Ouvrir", donc je n'ai pas pu lancer le script plusieurs fois. Mais peu importe, j'ai également essayé avec ta dernière mise à jour, et ça marche impec', merci !

  14. #14
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2017
    Messages : 2
    Par défaut BatchRenameFiles.org
    essayer l'outil BatchRenameFiles

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

Discussions similaires

  1. Remplacer espaces par _ dans répertoires et fichiers
    Par fanch35 dans le forum Langage
    Réponses: 14
    Dernier message: 25/06/2012, 14h57
  2. remplacer espace par tiret dans formulaire
    Par referenceur-tv dans le forum Langage
    Réponses: 17
    Dernier message: 03/06/2008, 14h52
  3. Débutant: Remplacer #ref! par 0 dans mon fichier xls
    Par billy78 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 11/06/2007, 15h41
  4. [VBA-E]Remplacement virgules par tabulation dans un fichier texte
    Par Mlezen dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/05/2006, 14h03
  5. Comment remplacer un espace par underscore?
    Par Jim_Nastiq dans le forum Langage
    Réponses: 6
    Dernier message: 05/04/2006, 16h13

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