Как пакетно переименовать файлы, скопированные из OSX в Windows с помощью «:» в именах файлов?


3

Это действительно озадачивает. У меня есть много видео, которые были сохранены с использованием Mac OS, и теперь я должен редактировать их в Windows XP. Я скопировал файлы с помощью HFSExplorer. Программное обеспечение для редактирования отказывается открывать файлы с их текущими именами, и до сих пор я не нашел способа пакетного переименования всех файлов.

Имена файлов выглядят так:

клип-2009-10-01 21; 26; 00.mov

Но я подозреваю, что в OSX время было 21:26:00.

Я хотел бы заменить пробел подчеркиванием, а точку с запятой - тире.

Я пробовал несколько приложений массового переименования, с; и:, но тщетно. Также я пробовал переименовать.pl, но тоже зря.


если имена имеют фиксированный формат, вы можете сделать это с помощью командного файла. Но лучше всего будет такой инструмент, как "Джон Т".
Matthew Whited

Я получаю подозрение, что имена файлов на самом деле не "clip-2009-10-01 21; 26; 00.mov", хотя они выглядят так. Системы Win запрещают ":" как символ имени файла, но другие файловые системы позволяют это. Если имя файла действительно было «clip-2009-10-01 21: 26: 00.mov», Windows НЕ отображала бы его правильно (вероятно, отображало бы «:» как «;»). Ручное переименование все равно будет работать. Некоторые из этих инструментов, которые вы обнаружили, что они не работают, могут работать, если вы попытаетесь заменить ":" на "-".
quack quixote

Спасибо за интересное понимание. Я попробовал Bulk Rename Utility и Lupas, но оба потерпели неудачу также с:.
tputkonen

Хорошо, еще две идеи, одна была бы безотказной, если бы мы правильно диагностировали проблему. смотри мой ответ.
quack quixote

Кроме того, это очень похоже на этот вопрос: superuser.com/questions/31587/...
quack quixote

Ответы:


4

обновленный :

Мы предполагаем, что "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 может быть включен как системная команда переименования.


Это может- На самом деле -Work Batch Method (Новый скрипт!)

Команда 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 $_;
}

Примечание Cygwin не является обязательным требованием для этого; Я считаю, что ActivePerl или любой другой интерпретатор Windows Perl будет работать так же хорошо.
quack quixote

Я уже пробовал это, но это не сработало. Имя файла не изменено. Я начинаю думать, что в моей среде что-то странное, я просто понятия не имею, что.
tputkonen

Какая версия? cygwin или activeperl? если cygwin, то какая версия perl? Мой пример использования был реальным тестом для вашего имени файла, поэтому он работал для меня.
quack quixote

Cygwin. Возможно, проблема в том, что файл был скопирован из OSX. Пожалуйста, смотрите комментарии к оригинальному вопросу.
tputkonen

Переименование коротких файлов работает - спасибо за подсказку!
tputkonen

2

Проверять, выписываться Переименовать мастер , у него есть множество способов манипулировать именами файлов в пакете. Вы хотите, чтобы проверить замещать Вкладка.

alt text

Rename Master является бесплатной.


1

Lupas Rename это бесплатная программа, разработанная для переименования большого количества файлов. Он работает на Win95, Win98, WinME, WinNT, Win2K и WinXP. Это простой файл .EXE и не требует никаких других внешних библиотек.

Вот некоторые из особенностей:

  • Переименовать файлы и папки
  • Переименовать файлы в рекурсивных подкаталогах
  • Интеграция с оболочкой (щелкните правой кнопкой мыши на папке в проводнике, чтобы запустить LupasRename для этой папки)
  • Мгновенный предварительный просмотр (необязательно)
  • Отменить последнюю операцию переименования
  • Создайте пакетный файл для переименования из консоли DOS
  • Создайте пакетный файл для операции UNDO из консоли DOS
  • Сохраните и загрузите ваши параметры в INI-файл
  • Фильтр по любым маскам: .mp3; .mp2 или ??? * .txt ...
  • Заменить подстроку другой на Matchcase Необязательно
  • Заменить подстроку другой на Matchcase Необязательно в расширении

alt text


Когда я нажимаю переименовать, он говорит: «Система не может найти указанный файл».
tputkonen

Я просто попробовал это без проблем. Вы должны выбрать все файлы для переименования и сделать это в 2 шага: (1) Заменить текст [пробел] этим новым текстом [_], затем переименовать (2) То же для; к -
harrymc

Возможно, проблема в том, что файл был скопирован из OSX. Пожалуйста, смотрите комментарии к оригинальному вопросу.
tputkonen

У Lupas Rename есть действие под названием Удалить акценты. Возможно, это немного нормализует имена файлов. Если нет, File Boss - еще один переименователь с 30-дневной пробной версией: theutilityfactory.com/summaries/... ,
harrymc

1

Просто сделайте это в Mac или Linux. Это переименует все файлы и папки с помощью: to -

find . -depth -exec rename 's/:/-/g' * {}\;

0

Total Commander включает в себя инструмент пакетного переименования с именем Multi-Rename Tool (по умолчанию это сочетание клавиш Ctrl + M).

В вашем случае вы можете переименовать файлы, запустив процесс дважды, один раз для замены пробела и один раз для замены точки с запятой.

Другой способ - использовать маску переименования - выберите диапазон перед пробелом, добавьте подчеркивание, затем диапазон после пробела, заменив точку с запятой тире с помощью поиска и замены.


0

Похож на пару других решений, Bulk Rename Utility это утилита, которая сделает работу Я нахожу это очень полезным и простым в использовании для моих потребностей в переименовании файлов.


Это не работает для меня. Как видно из столбца «новое имя», он не заменяет; с _: i37.tinypic.com/vqjhqq.jpg Если я нажимаю переименовать, он говорит, что файл не требует изменения имени.
tputkonen

Протестировано нормально для меня (под Win 7 64bit), по общему признанию с текстовым файлом, который я только что переименовал в то же самое - как ваше имя файла, а не фактический файл mov, созданный под OSX.
Bonus

0

Каковы разрешения на файл? Вы уверены, что имеете разрешение на их переименование? Если нет, возьмите в собственность файлы и попробуйте снова.


хорошая мысль, и кое-что проверить по принципу «сначала проверяй простые вещи», но он упомянул об этой ошибке из одного из инструментов: «Система не может найти указанный файл». Я ожидаю, что проблемы с разрешениями выдадут другую ошибку.
quack quixote

Там нет проблем с разрешениями. Спасибо, что поднял это, хотя я забыл упомянуть об этом.
tputkonen

0

Интересная проблема.

Вы можете написать свой собственный скрипт. Вот один скрипт, который будет работать. Он ЗАМЕНИТ ВСЕ КОЛОНЫ, ПОЛУКОЛОНЫ, ПРОСТРАНСТВА С ПОДЗЕМНОЙ Я предполагаю, что файлы находятся в E: / и имена соответствуют шаблону клипа * .mov. Вы можете изменить эти значения в скрипте на ваши правильные значения. Вы можете настроить скрипт еще больше, если хотите.

# Script Mac2WindowsFileTransfer.txt
# Go to directory where files are stored.
cd "E:/"                                     ### CHANGE THIS TO YOUR CORRECT VALUE. ###
# Get a list of clip*.mov files.
var str list ; lf -rng "clip*.mov" > $list   ### CHANGE THIS TO YOUR CORRECT VALUE. ###
# Go thru files one by one.
while ($list <> "")
do
    # Get the next file.
    var str file
    lex "1" $list > $file
    # Create the new name.
    var str newname
    stex -p "^/^l[" $file > $newname
    # REPLACE ALL COLONS, SEMICOLONS,  SPACES WITH UNDERSCORE.
    while ( { sen -r "^(\:\; )^" $newname } > 0 )
        sal -r "^(\:\; )^" "_" $newname
    # Rename file.
    system rename ("\""+$file+"\"") $newname
done

Сохранить сценарий как C: /Scripts/Mac2WindowsFileTransfer.txt. Скрипт в битрейскрипте ( http://www.biterscripting.com ). Вы можете скачать битерскрипт бесплатно. Запустите, введя следующую команду в битрейскрипте.

script "C:/Scripts/Mac2WindowsFileTransfer.txt"

Патрик


0

Используйте Linux live CD, чтобы перейти в папку с указанными файлами, а затем:

rename -v 's/\:|\*|\?|\"//g' "{}" \; *.mov

Это удалит большую часть того, что Windows не хотела. Например.

2004-01-02_23:58:22.mpg

станет:

2004-01-02_235822.mpg

0

Мне самому нравится ответ @ ~ quack. +1.

Но для потомков вот что я собирался опубликовать.

Я уже давно использую StExBar в инструментах Стефана. Он добавляет панель инструментов в проводник Windows с несколькими удобными функциями.

http://tools.tortoisesvn.net/

(У него есть несколько инструментов, но этот специфический - StExBar)

Вы можете выполнить запрошенное переименование с помощью двух простых команд. Вот скриншот первого, который показывает предварительный просмотр переименованных файлов и того, что они будут переименованы.

enter image description here


0

В предположении, что имена файлов содержат странные и невидимые символы, способ продолжить - использовать имена DOS старого формата 8.3. Чтобы узнать эти имена, используйте параметр -x:

image

Теперь используйте короткое имя для переименования файла:

ren CLIP-2~1.MOV "clip-2009-10-01_21_26_00.mov"

Если вы используете copy-paste для переименования файла, будьте осторожны, чтобы не распространять странные символы, поэтому не оставляйте пустые символы в новом имени (потому что они могут быть не совсем пустыми).


Спасибо, это похоже на работу. Однако мне нужно придумать скрипт, так как его можно переименовать вручную и в Проводнике.
tputkonen
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.