Wie kann ich Batch-Dateien umbenennen?
Frage
Ich bin für ein Skript suchen (Perl, Python oder Batch wäre schön), die durch einen bestimmten Dateibaum gehen und benennt alle untergeordneten Dateien.
Zum Beispiel Folder1>File1.anytype
wird Folder1>Folder1File1.anytype
.
Danke
Lösung
Sie erwähnen eine Batch-Datei, was wahrscheinlich bedeutet, dass Sie unter Windows sind (ich nehme an, Sie auf eine .bat Datei verweisen). Wenn Sie auf einem Unix-System sind, dann geben Sie diese einen Schuss:
find . -mindepth 2 -type f -exec sh -c "mv {} \`dirname {}\`/\`dirname {} | sed 's/^\.//' | sed 's/\///g'\`\`basename {}\`" \;
Alternativ kann dieses Python-3-Programm kann den Trick (sollte auch unter Windows arbeiten, ...):
#!/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:])
Die Verzeichnisstruktur vor:
.: Abc Def ./Abc: Foo2.bar Foo.bar ./Def: Baz2.quux Baz.quux Ghi ./Def/Ghi: Bar2.foo Bar.foo
Die Verzeichnisstruktur nach:
.: Abc Def ./Abc: AbcFoo2.bar AbcFoo.bar ./Def: DefBaz2.quux DefBaz.quux Ghi ./Def/Ghi: DefGhiBar2.foo DefGhiBar.foo
Andere Tipps
Das beste Batch Renamer ist mmv .
Und auch Wie eine Masse umbenennen zu tun?
Sie einen Versuch zu BatchRename geben könnte: http://batchrename.foryoursoft.com/
Sie können solche Umbenennungen erreichen, indem eine verschachtelte for-Schleife in der Befehlszeile mit .. wenn auch ein wenig hässlich:
for /D %d in (*) do for %f in ("%d\*.*") do move "%f" "%d\%~nd%~nf"
Wenn Sie den obigen Befehl in einem Batch-Skript setzen, wiederholen Sie jeweils% Zeichen einmal.
for /D %%d in (*) do for %%f in ("%%d\*.*") do move "%%f" "%%d\%%~nd%%~nf"
Um zu verstehen, was der obige Befehl funktioniert, FOR /?
in der Befehlszeile konsultieren.
Ich fühle mich wie Batch so obskur in diesen Tagen Ich brauche die BAT Weisheit irgendwie ... zu erhalten: -)
Ich scherze :-) .. aber der Befehl funktioniert, ich habe es versucht.
Pretty trivial in Perl File :: finden und File :: Copy