Mise à jour de :
Nous supposons que "clip-2009-10-01 21;26;00.mov" n'est pas le nom de fichier réel ; une possibilité est que le nom de fichier réel soit "clip-2009-10-01 21:26:00.mov". Cependant, nous ne pouvons pas le vérifier sous Windows.
Nous n'en aurons peut-être pas besoin.
Méthode à sécurité intégrée :
Démarrez sur un LiveCD Linux. Ubuntu 9.04 a un bon support NTFS, et Linux gère beaucoup plus de caractères bancals dans les noms de fichiers que Windows. La commande perl rename script peut être incluse comme commande rename du système.
Cela pourrait En fait, -Méthode de travail par lots (Nouveau script !)
La commande DOS DIR/X affiche les noms de fichiers courts, s'ils existent sur votre système .
$ cmd
c:\test> dir /x
Volume in drive E is NUVOL
Volume Serial Number is 80D3-A96D
Directory of e:\tor\test
10/04/2009 05:15 AM <DIR> .
10/04/2009 05:15 AM <DIR> ..
10/04/2009 05:11 AM 0 CLIP-2~1.MOV clip-2009-10-01 21;26;00.mov
1 File(s) 0 bytes
2 Dir(s) 5,201,670,144 bytes free
S'ils existent, la commande REN les déplace vers un nouveau nom ; le nouveau nom peut être un nouveau nom de fichier long (valide).
c:\test> ren CLIP-2~1.MOV "clip-2009-10-01_21-26-00.mov"
C'est comme ça qu'on en répare un.
Pour les traiter tous par lots, vous devez 1) saisir une liste de tous les fichiers que vous voulez déplacer ; 2) exécuter un court script perl pour convertir votre liste en un fichier batch avec les commandes REN appropriées ; et 3) exécuter le script batch résultant.
c:\test> dir /x > mybrokenfiles.lst
$ cat mybrokenfiles.lst | perl -lne 'next if not /MOV/; s/^.{1,39}//; s/^/ren /; s/ (\d\d);(\d\d);(\d\d)/_$1-$2-$3/; print' > fixmybrokenfiles.bat
c:\test> fixmybrokenfiles.bat
La ligne de commande perl suppose un format d'entrée très particulier, donc si le listing DOS montre des noms de fichiers longs dans un format autre que "21;26;00.mov", il ne fera probablement pas exactement ce que vous voulez. Si vous l'essayez, vérifiez que le lot script a l'air correct avant de l'exécuter.
Si vous êtes à l'aise avec perl (ou sed/awk, Python, peu importe), vous pouvez script ceci vous-même. Mais si DIR/X n'affiche pas les noms de fichiers courts, c'est que votre système les a désactivés, et cette solution ne vous aidera pas.
Réponse originale Il n'est pas utile avec ce que nous savons maintenant, mais si vous copiez à nouveau ce genre de fichier à partir d'OSX, vous pouvez l'utiliser AVANT la copie comme mesure préventive.
J'utilise beaucoup la ligne de commande sur les systèmes Windows et Linux. Il y a un script pratique en perl flottant sur l'internet qui permet de renommer des fichiers par lot en utilisant des regex standards en perl (google pour rename.pl pour le trouver).
Sous Cygwin sous Windows, utilisez cette option dans le répertoire où se trouvent vos fichiers pour les renommer :
$ ls
clip-2009-10-01 21;26;00.mov
$ rename.pl 'tr/ ;/_-/;' *
$ ls
clip-2009-10-01_21-26-00.mov
Je suis presque sûr que ma version provient de la Livre de recettes Perl :
#!/usr/bin/perl -w
# rename - Larry's filename fixer
$op = shift or die "Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}