Come posso rinominare i file batch?
Domanda
Sto cercando uno script (Perl, Python o in batch andrebbe bene), che passerà attraverso un albero di file designato e rinomina tutti i file figlio.
Per esempio, Folder1>File1.anytype
diventa Folder1>Folder1File1.anytype
.
Grazie
Soluzione
Si parla di un file batch, che probabilmente significa che siete su Windows (suppongo si fa riferimento a un file .bat). Se siete su un sistema Unix, dare a questo un colpo:
find . -mindepth 2 -type f -exec sh -c "mv {} \`dirname {}\`/\`dirname {} | sed 's/^\.//' | sed 's/\///g'\`\`basename {}\`" \;
In alternativa, questo programma Python 3 può fare il trucco (dovrebbe funzionare anche su 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:])
Il layout directory prima:
.: Abc Def ./Abc: Foo2.bar Foo.bar ./Def: Baz2.quux Baz.quux Ghi ./Def/Ghi: Bar2.foo Bar.foo
Il layout directory dopo:
.: Abc Def ./Abc: AbcFoo2.bar AbcFoo.bar ./Def: DefBaz2.quux DefBaz.quux Ghi ./Def/Ghi: DefGhiBar2.foo DefGhiBar.foo
Altri suggerimenti
Il miglior renamer batch è mmv .
E puoi anche Come fare una massa rinominare?
si potrebbe dare una prova di BatchRename: http://batchrename.foryoursoft.com/
È possibile ottenere tali rinomina utilizzando un ciclo for nidificato nella riga di comando .. anche se un po 'brutto:
for /D %d in (*) do for %f in ("%d\*.*") do move "%f" "%d\%~nd%~nf"
Se si desidera mettere il comando di cui sopra in uno script batch, ripetere ogni volta caratteri%.
for /D %%d in (*) do for %%f in ("%%d\*.*") do move "%%f" "%%d\%%~nd%%~nf"
Per capire che cosa il comando precedente corrisponde, rivolgetevi FOR /?
nella riga di comando.
Mi sento come Batch è così arcana questi giorni ho bisogno di preservare la saggezza BAT in qualche modo ...: -)
sto scherzando :-) .. ma il comando funziona, ho provato.
piuttosto banale in Perl utilizzando File :: Trova e File :: Copy