2009-04-05 7 views
1

Je suis à la recherche d'un script (Perl, Python ou batch serait bien) qui ira dans un arbre de fichiers désigné et renomme tous les fichiers enfants.Comment puis-je renommer par lots des fichiers?

Par exemple, Folder1>File1.anytype devient Folder1>Folder1File1.anytype.

Merci

+0

Pourquoi ce retagged pas la programmation liée? –

+0

Il a probablement été étiqueté comme n'étant pas lié à la programmation parce que vous semblez juste être à la recherche de logiciels existants pour accomplir une tâche et n'avez pas l'intention de faire vous-même la programmation. –

+0

vous pouvez supprimer le tag si vous ne l'aimez pas. – inspite

Répondre

2

Vous mentionnez un fichier de commandes, ce qui signifie probablement que vous êtes sous Windows (je suppose que vous faites référence à un fichier .bat). Si vous êtes sur un système unix, donner un coup de feu ce:

find . -mindepth 2 -type f -exec sh -c "mv {} \`dirname {}\`/\`dirname {} | sed 's/^\.//' | sed 's/\///g'\`\`basename {}\`" \; 

Sinon, ce programme Python 3 peut faire l'affaire (devrait également fonctionner sous Windows ...):

#!/usr/bin/env python3.0 

import os 
import sys 

def raise_error(e): 
    raise e 

def full_split(path): 
    head, tail = os.path.split(path) 

    if head: 
     return full_split(head) + [tail] 

    return [tail] 

def main(args): 
    if len(args) != 1: 
     print("Please specify one target directory", file=sys.stderr) 
     sys.exit(1) 

    os.chdir(args[0]) 
    for dirpath, _, filenames in os.walk('.', onerror=raise_error): 
     for f in filenames: 
      old = os.path.join(dirpath, f) 
      new = os.path.join(dirpath, ''.join(full_split(dirpath[2:]) + [f])) 
      os.rename(old, new) 

if __name__ == '__main__': 
    main(sys.argv[1:]) 

Le mise en page de répertoire avant:

.: 
Abc Def 

./Abc: 
Foo2.bar Foo.bar 

./Def: 
Baz2.quux Baz.quux Ghi 

./Def/Ghi: 
Bar2.foo Bar.foo

La mise en page du répertoire après:

.: 
Abc Def 

./Abc: 
AbcFoo2.bar AbcFoo.bar 

./Def: 
DefBaz2.quux DefBaz.quux Ghi 

./Def/Ghi: 
DefGhiBar2.foo DefGhiBar.foo
+0

Oui, je suis sur une machine Windows. –

+0

Ah, je suis désolé. J'ai peur dans ce cas je ne peux pas être d'aucune aide. Je vais laisser la réponse ici pour référence future. – Stephan202

+0

Ok, je peux être d'une aide après tout. Essayez la version Python :) – Stephan202

0

Vous pouvez obtenir ces renommages en utilisant un imbriquée pour boucle à la ligne de commande .. mais un peu laid:

for /D %d in (*) do for %f in ("%d\*.*") do move "%f" "%d\%~nd%~nf" 

Si vous souhaitez mettre la commande ci-dessus un script batch, répétez chaque caractère% une fois.

for /D %%d in (*) do for %%f in ("%%d\*.*") do move "%%f" "%%d\%%~nd%%~nf" 

Pour comprendre ce que la commande ci-dessus ne CONSULTEZ FOR /? à la ligne de commande.

Je me sens comme lot est si Arcane ces jours, je dois préserver la sagesse de BAT en quelque sorte ... :-)

je plaisante :-) .. mais la commande ne fonctionne, j'ai essayé il.

Questions connexes