【问题标题】:rename many files automatic one time - ddmmyyyy.file to yyyymmdd.file一次自动重命名多个文件 - ddmmyyyy.file 到 yyyymmdd.file
【发布时间】:2011-01-05 07:35:01
【问题描述】:

我有 1500 个日期格式不正确的文件。我想重命名它们。有没有可以做到这一点的工具?否则一段php代码。

文件名是: ddmmyyyy.xls(例如 2010 年 1 月 15 日的 15012010)

我想: yyyymmdd.xls(例如 20100115.xls)

关于如何一次性处理 1500 个文件的任何线索?

BR。安德斯


更新: 还尝试了答案之一中建议的 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

【问题讨论】:

  • 作为预防措施,请务必在尝试任何解决方案之前备份文件。
  • 会的 :-) 说得太频繁了

标签: php file rename


【解决方案1】:

这是一个开始(未经测试,但你应该明白)。

$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 );

}

【讨论】:

  • 正则表达式应该是/^(\d{2})(\d{2})(\d{4})\.xls$/i,不是吗?
  • 谢谢。所有文件已成功重命名。
  • 如果您将 2001 年 9 月 20 日和 2009 年 1 月 20 日的文件放在同一个文件夹中进行转换,这会不会很危险? (即,您会尝试将一个重命名为已经存在的名称并失败/覆盖)。更好的可能是该文件夹中未使用的中间扩展名,然后在末尾进行大重命名......
  • @Damien - 是的,你可以做所有这些,但如果你知道你的输入文件是好的(并且不会覆盖任何东西)你可以摆脱这个。这是一个一次性问题的快速解决方案!
【解决方案2】:

如果你有一台带有文件的 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

【讨论】:

  • +1。同样值得注意的是,可以使用运行 Mac OS 的 Mac 或运行 Cygwin 的 Windows 机器来完成。
【解决方案3】:

可以进行文件名模式转换的工具是Mp3tag

选择convert,然后选择filename - filename

我敢肯定还有其他工具!

(这个答案并不真正符合 StackOverflow 精神,但我认为 OP 不一定在寻找自动化解决方案......)

【讨论】:

  • 目标不是将 XLS 文件...转换为 XLS 文件,而是重命名它。
  • Mp3tag 是一个免费工具,用于通过文件模式(以及其他工具)批量重命名文件,我相信这就是目标。
  • 谢谢,我周末试过了,效果很好。用简短的快速入门指南更新了我的问题。
【解决方案4】:

基于alex function,但是这个正确添加了.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');
}

【讨论】:

  • 嘿,我的确实添加了 .xls 扩展名!
  • @alex:你编辑了它:$newFilename = $year . $month . $day;你只有这个。
  • 对不起,是的,我原来是这样做的。我做了很多编辑,因为我忘记了!
【解决方案5】:

如果你有 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

不需要外部工具。

【讨论】:

    【解决方案6】:

    文件名是:ddmmyyyy.xls(例如 15012010 为 2010 年 1 月 15 日)

    我想要: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
    

    此脚本在 biterscripting (http://www.biterscripting.com) 中。首先在测试文件夹中测试脚本。

    要进行测试,请将脚本代码保存在文件“C:/Scripts/RenameYYYYMMDD.txt”中,然后输入以下命令。

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

    此命令会将目录“C:/path/to/test 文件夹”下的所有文件 ddmmyyyy.xls 重命名为 yyyymmdd.xls。

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 2022-01-26
      • 1970-01-01
      • 2021-08-14
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多