Обновлено :
Мы предполагаем, что "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/^.//; 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 $_; }