автоматическое переименование многих файлов - от ddmmyyyy.file до yyyymmdd.file - PullRequest
2 голосов
/ 15 января 2010

У меня 1500 файлов с неправильным указанием даты. Я хотел бы переименовать их. Есть ли инструмент, который может это сделать? В противном случае кусок кода PHP.

Имена файлов: ddmmyyyy.xls (например, 15012010 для 15 января 2010 г.)

и мне хотелось бы: yyyymmdd.xls (например, 20100115.xls)

Любая подсказка о том, как это можно сделать для 1500 файлов за один раз?

BR. Андерс


UPDATE: Также попробовал MP3TAG, который предлагается в одном из ответов. Это бесплатный инструмент и тоже сделал свою работу. Потребовалось время, чтобы понять, как его использовать. Если вы хотите попробовать сделать это:

  1. добавить xls (или другой формат) в список редактируемых файлов в конфигурации
  2. выберите папку для загрузки файлов И отметьте файлы на панели, которую вы хотите редактировать
  3. Я нажал кнопку «Преобразовать - быстро». Также возможно сохранить схемы для будущего использования, но я не мог понять, как.
  4. после нажатия «преобразовать - быстро» выберите «с помощью регулярных выражений» (только опция регулярных выражений)

А затем вы просто добавляете информацию для обработки переименования. В моем случае:

  • поле: _FILENAME
  • из: ([0-9] {2}) ([0-9] {2}) ([0-9] {4})
  • до: $ 3- $ 2- $ 1

Теперь все файлы с именем 15012010.xls (ddmmyyyy.xls) будут называться 2010-01-15.xls

Ответы [ 6 ]

3 голосов
/ 15 января 2010

Вот начало (не проверено, но вы должны понять).

$files = glob('your/folder/*.xls');

foreach($files as $file) {

    preg_match_all('/^(\d{2})(\d{2})(\d{4})\.xls$/', basename($file), $matches);

    if ( ! $matches) continue;        

    $year = $matches[0][3];
    $month = $matches[0][2];
    $day = $matches[0][1];

    $newFilename = $year . $month . $day . '.xls'; 
    rename  ( $file, dirname($file) . '/' . $newFilename );

}
1 голос
/ 15 января 2010

Если у вас есть Linux-машина с файлами ... вы можете использовать bash для:

for f in *.xls; do
    mv $f "$(echo $f | cut -c4-8)$(echo $f | cut -c3,4)$(echo $f | cut -c1,2).xls"
done
0 голосов
/ 01 февраля 2010

Имена файлов: ddmmyyyy.xls (например, 15012010 на 15 января 2010 г.)

и я хотел бы: yyyymmdd.xls (например, 20100115.xls)

Используйте этот скрипт.

# Script RenameYYYYMMDD.txt
var str dir, list, file, newname, dd, mm
lf -r -n "*.xls" $dir > $list
while ($list <> "")
do
    lex "1" $list > $file ; stex -p "^/^l[" $file > $newname ; chex "2]" $newname > $dd
    chex "2]" $newname > $mm ; sin "^.^l" ($mm+$dd) $newname > null
    system rename ("\""+$file+"\"") $newname
done

Этот скрипт находится в режиме битрейскриптинга (http://www.biterscripting.com). Сначала протестируйте скрипт в тестовой папке.

Для проверки сохраните код скрипта в файле "C: /Scripts/RenameYYYYMMDD.txt" и введите следующую команду.

script "C:/Scripts/RenameYYYYMMDD.txt" dir("C:/path/to/test folder")

Эта команда переименует все файлы ddmmyyyy.xls в каталоге «C: / path / to / test folder» в yyyymmdd.xls.

0 голосов
/ 15 января 2010

если у вас есть bash

#!/bin/bash

shopt -s nullglob
for xls in [0-9]*.xls
do
    day=${xls:0:2}
    mth=${xls:3:2}
    yr=${xls:4:4}
    echo mv "$xls" "${yr}${mth}${day}.xls"
done

внешние инструменты не нужны.

0 голосов
/ 15 января 2010

Основано на функции alex , но при этом корректно добавляется расширение .xls.

foreach (glob('/path/to/your/*.xls') as $file)
{
    rename($file, dirname($file) . '/' . substr(basename($file), 4, 4) . substr(basename($file), 2, 2) . substr(basename($file), 0, 2) . '.xls');
}
0 голосов
/ 15 января 2010

Инструмент, который может выполнять преобразование шаблона имени файла: Mp3tag .

Выберите convert, а затем filename - filename.

Я уверен, что есть и другие инструменты!

(Этот ответ на самом деле не соответствует духу StackOverflow, но я думаю, что ОП не обязательно ищет автоматизированное решение ...)

...