2016-04-01 1 views
0

Доброго день,Файлы насыпного переименование - соответствует предопределенному текстовому файлу

Я пытаюсь переименовать/упорядочивать файлы на основе соответствия/поиске найден в текстовом файле.

У меня есть несколько сотен кириллицы (русский) с именем медиа-файлов в папке, как это:

  • файл 35.avi
  • файл34.avi
  • файл2 4.avi
  • файл14 .avi

* обратите внимание, что некоторые файлы имеют пробелы

Текстовый файл с желаемыми именами выглядит так:

  • файл 35.avi | 4. файл 35.avi
  • файл34.avi | 3. файл34.avi
  • файл2 4.avi | 1. файл2 4.avi
  • файл14.avi | 2. файл14.avi

Причина выглядит таким образом (с | в качестве разделителя), потому что я попытался с помощью «Bulk утилита переименования», которая использует трубу | как разделитель для функции «Переименовать пар». По сути, имя файла справа от трубы | является конечным продуктом. К сожалению, эта функция не работает с кириллицей (русскими) или другими нестандартными символами.

Я нашел сценарий PowerShell HERE, который кажется почти тем, что мне нужно, за исключением того, что он не соответствует именам файлов перед переименованием. Аналогично, я нашел этот скрипт Python HERE, который делает то, что мне нужно, но это для Ubuntu. К сожалению, я нахожусь на Windows7 и не уверен, что это применимо ко мне.

Любые рекомендации?

Большое спасибо за ваше время!

+0

Почему вы не можете использовать * перепрограммируемую переименованную утилиту * еще раз, но на этот раз сделать правильный путь? – Farside

+0

Не уверен, есть ли другой способ сделать это с помощью BRU. Можете ли вы предложить правильный путь? – Norskyi

ответ

0

Вы можете прочитать текстовый файл в хэш-таблицу, где ключ является старым названием (значение на левой стороне |), и значение это новое название:

$RenameTable = @{} 
Get-Content textfile.txt |ForEach-Object { 
    $OldName,$NewName = $_.Split('|') 
    $RenameTable[$OldName] = $NewName 
} 

Тогда переименовать файлы в зависимости от того, что находится в хеш-таблице:

Get-ChildItem .\folder\with\avi\files |Rename-Item -NewName { 
    if($RenameTable.ContainsKey($_.Name)){ 
     $RenameTable[$_.Name] 
    } else { 
     $_.Name 
    } 
} 
+0

Это сработало! Я люблю тебя :) Спасибо! – Norskyi

+0

Может быть, использовать 'Get-ChildItem $ ScriptDir -Filter * .avi | ...' только для переименования файлов avi, но да, в противном случае это должно быть хорошо –

+0

отлично, еще раз спасибо! – Norskyi

Смежные вопросы