[batch] Renommer 1 caractère d'1 fichier

Résolu
francky172 Messages postés 2 Statut Membre -  
 Emilien -
Bonjour,
Ayant fait une centaines de recherche, je ne trouve toujours pas le bon code pour modifier un caractère en plein milieu d'un fichier !

Exemple : prenom.nom.txt
J'aimerais avoir : prenom_nom.txt
Sachant que ce code n'est pas censé connnaître le nom du fichier.

Il faudrait que ce code renomme tout les aaaa.bbb.txt en aaaa_bbb.txt dans un même dossier.

Si possible en batch car, j'ai déjà plusieurs lignes en batch dans ce même script.

J'ai tenté les commandes for / set ... en vain. Trop dur!

Configuration Win XP SP3.

Avec la commande for, en admettans que le ou les fichiers sont dans d:
j'arrive à ça :

@echo off
cd d:
set new=_
for %%. in (*.txt) do rename *.* %new%%.*

et là, les fichiers se renomment comme suit :
mmm.ppp.txt = _.ppp.txt
prenom.nom.txt = _.nom.txt

Qui pourrait m'aider ?

3 réponses

  1. caiman2 Messages postés 1489 Statut Membre 313
     
    Bonjour,

    Faite ceci:

    REM *** debut programme ****
    dir /B c:\temp\temp > c:\temp\files_list.txt
    for /F "tokens=1,2,3 delims=. " %%i IN (c:\temp\files_list.txt) do c:\temp\temp\%%i.%%j.%%k c:\temp\temp\%%i_%%j.%%k
    REM *** fin programme ******

    Faites l'essai en changeant "rename" par "echo"

    En fait je vous fais générer un fichier liste qui contient la liste des fichiers à renommer , ensuite une utilise l'iterateur for /F ou on lit et manipule les noms des fichiers dans ce fichier liste.
    Dans cette exemple les fichiers à renommer sont dans c:\temp\temp

    Je l'ai testé avec succès

    Amicalement
    Philippe
    Dieu a t'il créé le cerveau ou est-ce l'inverse ?
    Heureux les simples d'esprit parce que le royaume des cieux leur appartient.
    0
    1. caiman2 Messages postés 1489 Statut Membre 313
       
      Attention les lignes :
      for /F "tokens=1,2,3 delims=. " %%i IN (c:\temp\files_list.txt) do c:\temp\temp\%%i.%%j.%%k c:\temp\temp\%%i_%%j.%%k

      doit être en une seule ligne !
      0
  2. caiman2 Messages postés 1489 Statut Membre 313
     
    REM *** debut programme ****
    dir /B c:\temp\temp > c:\temp\files_list.txt
    cd c:\temp\temp
    for /F "tokens=1,2,3 delims=. " %%i IN (c:\temp\files_list.txt) do rename %%i.%%j.%%k %%i_%%j.%%k
    cd c:\temp
    REM *** fin programme ****
    0
  3. francky172 Messages postés 2 Statut Membre
     
    Un grand merci à vous.

    Votre ligne de commande fonctionne à merveille.

    @ Bientôt
    0
    1. caiman2 Messages postés 1489 Statut Membre 313
       
      A votre service.
      Amicalement
      0
      1. Emilien > caiman2 Messages postés 1489 Statut Membre
         

        Bonjour,

        je cherche à faire quasiment la même chose mais avec des parenthèses mises en fin de nom de fichier texte.

        exemple toto(1).txt a remplacer par toto1.txt ou toto919.txt

        soit supprimer les parenthèses soit les remplacer par un chiffre quelconque.

        12ans après votre précédent message êtes vous toujours prêt à aider un novice :) ?

        merci par avance 

        0
      2. Emilien > Emilien
         

        je viens de trouver, je mets la solution ici si jamais ça peut aider

        cd C:\temp
        setlocal enabledelayedexpansion
        for %%a in (*.csv) do (
        set f=%%a
        set f=!f:^(=!
        set f=!f:^)=!
        ren "%%a" "!f!"
        )

        0