Question

Je suis à la recherche d'un script (Perl, Python ou d'un lot serait bien) qui passera par un arbre de fichier désigné et renomme tous les fichiers enfants.

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

Merci

Était-ce utile?

La solution

Vous parlez d'un fichier batch, 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:])

La mise en page du 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

Autres conseils

La meilleure Renamer lot est MMV .

Et voir aussi Comment faire une masse renomme?

vous pouvez donner un essai à BatchRename: http://batchrename.foryoursoft.com/

Vous pouvez obtenir ces renommages en utilisant une boucle imbriquée à 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 dans un script batch, répéter chaque fois des caractères%.

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-ci je dois préserver en quelque sorte la sagesse BAT ...: -)

Je plaisante :-) .. mais la commande fonctionne, je l'ai essayé.

assez trivial en Perl utilisant File :: Trouvez et File :: Copy

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top