Обновлено:
Мы предполагаем, что "clip-2009-10-01 21; 26; 00.mov" не является реальным именем файла; одна возможность состоит в том, что фактическое имя файла - "clip-2009-10-01 21:26:00.mov". Однако мы не можем проверить это под Windows.
Возможно, нам не нужно.
Отказоустойчивый метод:
Загрузитесь с Linux LiveCD. Ubuntu 9.04 имеет хорошую поддержку NTFS, и Linux обрабатывает гораздо больше именных символов в именах файлов, чем Windows. Скрипт переименования perl может быть включен как системная команда переименования.
Это-Might- Фактически -Работа Batch метод (New Script!)
Команда DOS DIR/X показывает короткие имена файлов, если они существуют в вашей системе.
$ 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
Если они существуют, команда REN переместит их на новое имя; новое имя может быть новым (действительным) длинным именем файла.
c:\test> ren CLIP-2~1.MOV "clip-2009-10-01_21-26-00.mov"
Вот как это исправить.
Для пакетной обработки всех них вам необходимо: 1) получить список всех файлов, которые вы хотите переместить; 2) запустить короткий Perl-скрипт для преобразования вашего списка в командный файл с соответствующими командами REN; и 3) запустить полученный пакетный скрипт.
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
Командная строка perl предполагает очень специфический формат ввода, поэтому, если в списке DOS отображаются длинные имена файлов, отличные от формата «21; 26; 00.mov», он, вероятно, не будет работать именно так, как вам нужно. Если вы попробуете это, дважды проверьте, что пакетный скрипт выглядит прямо перед его запуском.
Если вы знакомы с Perl (или sed/awk, python и т.д.), Вы можете написать это самостоятельно. Но если DIR/X не показывает короткие имена файлов, ваша система отключит их, и это решение не поможет.
Оригинальный ответ: бесполезно с тем, что мы знаем сейчас, но если вы снова скопируете этот тип файла из OSX, вы можете использовать это ДО копирования в качестве превентивного шага.
Я часто использую командную строку в системах Windows и Linux. В Интернете есть удобный perl-скрипт, который позволяет переименовывать пакетные файлы, используя стандартные регулярные выражения perl (google для rename.pl, чтобы найти его).
В Cygwin для Windows используйте это в каталоге, в котором находятся ваши файлы, чтобы переименовать их:
$ ls
clip-2009-10-01 21;26;00.mov
$ rename.pl 'tr/ ;/_-/;' *
$ ls
clip-2009-10-01_21-26-00.mov
Я уверен, что моя версия взята из Perl Cookbook:
#!/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 $_;
}