У меня есть папка с изображениями, сделанными на двух разных мобильных телефонах. Оба телефона используют несколько разные форматы имен файлов. Я хочу заменить один из них на другой, чтобы у меня был аккуратный фотоальбом.
Как я могу изменить имя файла с 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
Выбирает только файлы, содержащие символ подчеркивания, поэтому мы не пытаемся переименовать файл другого типа. Этот сценарий предназначен для запуска в тематической папке; запуск его в другом месте может сделать странные вещи с неправильными файлами.