Как пакетно переименовать файлы, скопированные из 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.