rinominare in batch nomi di file con numeri per ordinare in ordine alfabetico


2

Voglio rinominare in batch i file contenenti numeri, riempiendo i numeri di zero. L'obiettivo è ordinare in ordine alfabetico gruppi di file numerati nell'ordine corretto in qualsiasi applicazione.

In un set di file con lo stesso prefisso seguito da un numero, desidero riempire ogni numero con tanti zeri quante sono le cifre del numero più alto.

Vale a dire un elenco di file chiamati in questo modo:

xx 1 abc.txt
xx 2 def.txt
xx 3 ghi.txt
xx 3.5 jkl.txt
xx 4a mno.txt
xx 4b pqr.txt
...
xx 100 end.txt

dovrebbe diventare:

xx 001 abc.txt
xx 002 def.txt
xx 003 ghi.txt
xx 003.5 jkl.txt
xx 004a mno.txt
xx 004b pqr.txt
...
xx 100 end.txt

(Il sistema è Windows XP)

(Windows Explorer utilizza una sorta di euristica per ordinare i file con i numeri in questo modo, non sempre correttamente. Sto comunque cercando un modo per rinominare effettivamente i file)

appendice

Mi è stato fatto riferimento a questa domanda come possibile duplicato: come posso rinominare in massa i file? Gli strumenti qui menzionati (Bulk Rename Utility, AntRenamer, Free Commander Portable ecc.) Sono per quanto posso dire non sono in grado di rilevare la quantità minima di paddding necessaria per ogni set di file.

Il mio pensiero era questo: Explorer è in grado di rilevare file con numeri consecutivi, anche se sono allineati a sinistra senza riempimento, come nel mio primo esempio sopra. Utilizza questo rilevamento per ordinare correttamente i file.
(vedi ad esempio http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html )
Sto cercando uno strumento che fa lo stesso rilevamento, ma rinomina anche il file di conseguenza.
(Trovare il numero più grande per ogni set di file correlato, non semplice il numero più grande nell'intera directory, quindi riempire i numeri in ogni set.)

O per dirla in altro modo: voglio fare un "ordinamento naturale" per tutti i file in una directory, quindi rinominarli in modo che l'ordinamento ascii sia identico al "ordinamento naturale"

Ora sospetto che non ci siano strumenti in grado di farlo, quindi probabilmente ho solo bisogno di scrivere una sceneggiatura.


Per questo puoi sempre scrivere un programma o uno script. Personalmente userei Python.
James T Snell,

Questo può essere facilmente ottenuto se stai usando * nix. Per Windows, dovrai installare un ambiente per eseguire alcuni script, a meno che qualche bat guru non veda questa pagina ...
billc.cn

PowerShell. Sembra troppo complicato per un rinominatore di massa.
vichingo,

Perché un rinominatore batch (GUI, non script) non funziona? Se ho capito bene, devi solo inserire due zero per numeri inferiori a 10 o uno zero per numeri inferiori a 100. Due passaggi potrebbero non essere facili come uno, ma sembra comunque dannatamente facile da realizzare.
Nicholas Cole,

Risposte:


0

Questo dovrebbe funzionare al suo livello base. Prima fai un backup!

cd in dir contenente file: 99999 - description.txt

perl rename-pad.pl

#!/usr/bin/perl
opendir(DIR, ".");
@files = sort(grep(/txt$/i, readdir(DIR)));
closedir(DIR);

$len=0;
foreach $file (@files) {
    print $file."\n";
    if ($file=~/xx (\d+)(.*\.txt)$/i) {
        $len=(length($1)>$len)?length($1):$len;
    }
}
foreach $file (@files) {
    if ($file=~/xx (\d+)(.*\.txt)$/i) {
        $newfile=sprintf("%0${len}d%s", $1, $2);
        rename("$file", "$newfile");
    }
}

Ho visto che i criteri erano diversi qui rispetto all'altra discussione. Gioca con le regexps finché non funziona.
Andy Lee Robinson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.