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

5391
tputkonen

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

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

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

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

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

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

3
if the names are all fixed format you could do it with a batch file. But you best bet will be a tool like "John T" said. Matthew Whited 15 лет назад 0
i'm getting the suspicion that the filenames are not actually "clip-2009-10-01 21;26;00.mov" even though they look like that. Win systems disallow ":" as a filename character, but other filesystems allow it. If the filename was actually "clip-2009-10-01 21:26:00.mov", Windows would NOT display it correctly (would probably display the ":"s as ";"s). Manual renaming would still work. SOME of these tools that you've found not to work might work if you tried replacing ":" with "-". quack quixote 15 лет назад 0
Спасибо за интересное понимание. Я пробовал Bulk Rename Utility и Lupas, но оба не удалось с:. tputkonen 15 лет назад 0
ok, two more ideas, one would be failsafe if this we've got the problem diagnosed correctly. see my answer. quack quixote 15 лет назад 0
Кроме того, это очень похоже на этот вопрос: http://superuser.com/questions/31587/how-to-force-windows-xp-to-rename-a-file-with-a-special-character quack quixote 15 лет назад 0
did the perl script-generator i posted work? or did it break on your actual DIR/X output? quack quixote 15 лет назад 0
Просто отметив, что OS X также не допускает ":" в именах файлов. Исторически ":" раньше был разделителем каталогов, для чего Windows использует "\". deceze 15 лет назад 0
@deceze спасибо за информацию. основной вывод заключается в том, что некоторые символы из имен файлов OSX были запрещены в Windows, в результате чего отображаемое имя файла было неправильным. quack quixote 15 лет назад 0

11 ответов на вопрос

4
quack quixote

Обновлено :

Мы предполагаем, что "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 $_; } 
Обратите внимание, Cygwin не является обязательным требованием для этого; Я считаю, что ActivePerl или любой другой интерпретатор Windows Perl будет работать так же хорошо. quack quixote 15 лет назад 0
Я уже пробовал это, но это не сработало. Имя файла не изменено. Я начинаю думать, что в моей среде что-то странное, я просто понятия не имею, что. tputkonen 15 лет назад 0
Which version? cygwin or activeperl? if cygwin, what perl version? my example usage was an actual test on your filename, so it worked for me. quack quixote 15 лет назад 0
Cygwin. Возможно, проблема в том, что файл был скопирован из OSX. Пожалуйста, смотрите комментарии к оригинальному вопросу. tputkonen 15 лет назад 0
Переименование коротких файлов работает - спасибо за подсказку! tputkonen 15 лет назад 0
woot! does the DIR/X output work with perl to generate the batch script correctly? quack quixote 15 лет назад 0
Это делает - спасибо! Поскольку файлы БОЛЬШИЕ, я просто изменил строку на: cat mybrokenfiles.lst | perl -lne 'следующий, если не / MOV /; . S / ^ //; s / ^ / ren /; s / (\ d \ d); (\ d \ d); (\ d \ d) / _ $ 1- $ 2- $ 3 /; print '> fixmybrokenfiles.bat Возможно, это можно сделать и с помощью awk. Большое спасибо!! tputkonen 15 лет назад 0
милая. да, awk может это сделать, или даже sed. Я более знаком с Perl, так что там было проще (в моей попытке Sed последнее регулярное выражение подстановки также должно было избегать всех скобок, поэтому его было трудно читать). quack quixote 15 лет назад 0
к сожалению, я только что сделал один из них в моей системе, и нет короткого имени файла, чтобы исправить. нужно вернуть диск обратно в исходную систему, чтобы просто переименовать его. :( quack quixote 15 лет назад 0
Еще один фантастический ответ от @quack quixote Josh 14 лет назад 0
2
John T

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

альтернативный текст

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

1
harrymc

Lupas Rename - это БЕСПЛАТНАЯ программа, разработанная для переименования большого количества файлов. Он работает на Win95, Win98, WinME, WinNT, Win2K и WinXP. Это простой файл .EXE и не требует никаких внешних библиотек.

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

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

альтернативный текст

Когда я нажимаю переименовать, он говорит: «Система не может найти указанный файл». tputkonen 15 лет назад 0
Я просто попробовал это без проблем. Вы должны выбрать все файлы для переименования и сделать это в 2 шага: (1) Заменить текст [пробел] этим новым текстом [_], затем переименовать (2) То же для; к - harrymc 15 лет назад 0
Возможно, проблема в том, что файл был скопирован из OSX. Пожалуйста, смотрите комментарии к оригинальному вопросу. tputkonen 15 лет назад 0
У Lupas Rename есть действие под названием Удалить акценты. Возможно, это немного нормализует имена файлов. Если нет, File Boss - еще один переименователь с 30-дневной пробной версией: http://www.theutilityfactory.com/summaries/rename-files-advanced-formatting.htm. harrymc 15 лет назад 0
1
patrick

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

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

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

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

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

0
JMD

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

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

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

http://tools.tortoisesvn.net/

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

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

0
Bonus

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

It doesn't work for me. As you can see from the "new name" column, it doesn't replace ; with _: http://i37.tinypic.com/vqjhqq.jpg If I click rename, it says the file didn't require name change. tputkonen 15 лет назад 0
Проверено нормально для меня (под Win 7 64bit), по общему признанию с текстовым файлом, который я только что переименовал в то же самое - как ваше имя файла, а не фактический файл mov, созданный под OSX. Bonus 15 лет назад 0
0
MDMarra

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

good thought, and something to check on the "check simple stuff first" principle, but he mentioned this error from one of the tools: "The system cannot find the file specified." i'd expect permissions problems to give a different error. quack quixote 15 лет назад 0
Там нет проблем с разрешениями. Спасибо, что поднял это, хотя я забыл упомянуть об этом. tputkonen 15 лет назад 0
0
harrymc

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

образ

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

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

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

Спасибо, это похоже на работу. Однако мне нужно придумать сценарий, так как его можно переименовать вручную и в Проводнике. tputkonen 15 лет назад 0
0

Interesting problem.

You can write your own custom script. Here is one script that will work. It will REPLACE ALL COLONS, SEMICOLONS, SPACES WITH UNDERSCORE. I will assume the files are in E:/ and the names follow the pattern of clip*.mov. You can change this values in the script to your correct values. You can customize the script even further, if you wish.

# 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 

Save the script as C:/Scripts/Mac2WindowsFileTransfer.txt. The script is in biterscripting ( http://www.biterscripting.com ). You can download biterscripting free. Run the by typing the following command in biterscripting.

script "C:/Scripts/Mac2WindowsFileTransfer.txt" 

Patrick

Похожие вопросы