Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一次性自动重命名多个文件-ddmmyyyy.file为yyyyymmdd.file_Php_File_Rename - Fatal编程技术网

Php 一次性自动重命名多个文件-ddmmyyyy.file为yyyyymmdd.file

Php 一次性自动重命名多个文件-ddmmyyyy.file为yyyyymmdd.file,php,file,rename,Php,File,Rename,我有1500个文件的命名格式不正确。我想重新命名它们。有没有一种工具可以做到这一点?否则就是一段php代码 文件名为: ddmmyyyy.xls(如2010年1月15日的15012010) 我想: yyyymmdd.xls(例如20100115.xls) 关于如何一次性处理1500个文件的线索 比尔。安德斯 更新: 还尝试了其中一个答案中建议的MP3TAG。这是一个免费的工具,也做了工作。花了一段时间才弄明白如何使用它。如果您不想尝试这样做: 将xls(或其他格式)添加到配置中的可编辑文件列表

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

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

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

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

比尔。安德斯


更新: 还尝试了其中一个答案中建议的MP3TAG。这是一个免费的工具,也做了工作。花了一段时间才弄明白如何使用它。如果您不想尝试这样做:

  • 将xls(或其他格式)添加到配置中的可编辑文件列表中
  • 选择要加载文件的文件夹,并在要编辑的窗格中标记文件
  • 我点击了“转换-快速”按钮。也可以保存schemaes以备将来使用,但我不知道如何保存
  • 单击“转换-快速”后,选择“使用正则表达式”(仅限正则表达式选项)
  • 然后您只需添加信息来处理重命名。就我而言:

    • 字段:\u文件名
    • from:([0-9]{2})([0-9]{2})([0-9]{4})
    • 至:$3-$2-$1
    现在,所有名为15012010.xls(ddmmyyyy.xls)的文件都将命名为2010-01-15.xls

    这是一个开始(未测试,但您应该知道)


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

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

    选择
    convert
    ,然后选择
    filename-filename

    我肯定还有其他的工具

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

    基于,但这个答案正确地添加了
    .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');
    }
    
    如果你有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
    
    不需要外部工具

    文件名为: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
    

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

    作为预防措施,请确保在尝试任何解决方案之前备份这些文件。将执行:-)不能经常说,因为目标不是转换xls文件。。。Mp3tag是一个免费的工具,用于通过文件模式(以及其他工具)批量重命名文件,我相信这就是我的目标。谢谢,我在周末尝试过,效果很好。用简短的快速入门指南更新了我的问题。嘿,我的添加了.xls扩展名@亚历克斯:您编辑了它:
    $newFilename=$year$一个月$一天/^(\d{2})(\d{2})(\d{4})\.xls$/i
    ,否?谢谢。所有文件都已成功重命名。如果您将2001年9月20日和2009年1月20日的文件放在同一文件夹中进行转换,这不是很危险吗?(即,您尝试将一个名称重命名为已存在的名称,并失败/覆盖)。更好的方法可能是使用一个在该文件夹中没有使用的中间扩展名,然后在最后进行一个大的重命名…@Damien-yeh,你可以做所有这些,但是如果你知道你的输入文件是好的(并且不会覆盖任何内容),你可以不受影响。这是一个一次性问题的快速解决方案+1.同样值得注意的是,可以通过运行Mac OS的Mac或运行Cygwin的windows机器来实现。
    # 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
    
    script "C:/Scripts/RenameYYYYMMDD.txt" dir("C:/path/to/test folder")