Назад | Перейти на главную страницу

Пакетное переименование файлов с помощью PowerShell или другого

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

Как я могу изменить имя файла с 20110809_121158.jpg к 2011-08-09 12.11.58.jpg?

Было бы здорово, если бы решение было основано на Powershell, но любой другой вариант также приветствуется!

Вот один из способов сделать это с помощью SubString:

function getNewFileName($fname)
{
    $year = $fname.SubString(0,4)
    $month = $fname.SubString(4,2)
    $day = $fname.SubString(6,2)
    $hours = $fname.SubString(9,2)
    $minutes = $fname.SubString(11,2)
    $seconds = $fname.SubString(13,2)
    $new_fname = [string]::Format( "{0}-{1}-{2} {3}.{4}.{5}.jpg", $year,$month,$day,$hours,$minutes,$seconds) 
    return $new_fname;
}

Чтобы использовать это для переименования выбранных записей файлов в папке, вы можете использовать что-то вроде этого:

$fileEntries = Get-ChildItem *_* -name 

foreach($fileName in $fileEntries) 
{ 
    $newFileName = getNewFileName($fileName)
    Write-Host -NoNewLine Rename-Item $filename $newFileName 
    Write-Host
}         

Как написано, этот сценарий на самом деле ничего не изменит - он позволяет предварительно просмотреть, что изменится, путем вывода предлагаемой команды переименования на консоль. Чтобы фактически переименовать файлы, вам нужно удалить операторы «Write-Host». Этот сценарий предполагает, что все, что у вас есть в папке, - это два типа имен файлов, которые вы упомянули.

    $fileEntries = Get-ChildItem *_* -name 

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