返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP批量文件重命名脚本(支持正则)
  • 913
分享到

PHP批量文件重命名脚本(支持正则)

正则php重命名 2023-05-14 20:05:43 913人浏览 安东尼
摘要

本篇文章给大家带来了关于PHP的相关知识,其中主要跟大家介绍怎么用php实现批量文件重命名脚本,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。PHP批量文件重命名脚本(支持正则)如题。【免责声明】请了解怎么使用和正则的情况下谨慎使用,由

本篇文章给大家带来了关于PHP的相关知识,其中主要跟大家介绍怎么用php实现批量文件重命名脚本,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

PHP批量文件重命名脚本(支持正则)

PHP批量文件重命名脚本(支持正则)

如题。

【免责声明】请了解怎么使用和正则的情况下谨慎使用,由此造成的任何后果均与本程序及其作者无关~

【使用说明】

格式: rename from to path from 是从什么文件名 to 是重命名什么文件名 path 是哪个文件夹(path 可省略,默认为当前文件夹)

【比如】

rename “(\d+)(.*).jpg” “{1}.jpg” {1} 代表正则的第一个捕获组,{2},{3} 以此类推

rename “(\d+).jpg” “{i}.jpg” {i} 代表从 1 开始每个文件增加 1,{i10} 代表从 10 开始每个文件加 1,{i10+2} 代表从 10 开始加 2,{i10-2} 代表从 10 开始减 2

【另外】

--rsort 代表文件名按倒序处理,默认为正序 --debug 代表调试,可以打印出哪个文件将会重命名为什么名称的列表 --help 是显示帮助文档

【其他】

默认重命名后的文件在 path 目录下的 renamed 目录里,不会重命名原文件,请确认无误后仔细拷贝(如需重命名在源文件上,请加 --force 参数,该参数请谨慎使用,当出现错误时,文件会被覆盖掉且无法恢复,因此非经过严格测试,确保安全情况下不建议使用)

【代码如下】

#!/usr/bin/php
<?php
//【免责声明】请了解怎么使用和正则的情况下谨慎使用,由此造成的任何后果均与本程序及其作者无关
//PHP批量文件重命名脚本(支持正则)
// 格式: rename from to path from是从什么文件名 to是重命名什么文件名 path是哪个文件夹(path可省略,默认为当前文件夹)
// 比如: rename "(\d+)(.*)\.jpg" "{1}.jpg" {1}代表正则的第一个捕获组,{2},{3}以此类推
//       rename "(\d+).jpg" "{i}.jpg" {i}代表从1开始每个文件增加1,{i10}代表从10开始每个文件加1,{i10+2}代表从10开始加2,{i10-2}代表从10开始减2
// 另外: --rsort代表文件名按倒序处理,默认为正序 --debug代表调试,可以打印出哪个文件将会重命名为什么名称的列表 --help是显示帮助文档
// 默认重命名后的文件在path目录下的renamed目录里,不会重命名原文件,请确认无误后再拷贝(如需重命名在源文件上,请加--force参数,该参数请谨慎使用,当出现错误时,文件会被覆盖掉且无法恢复,因此非经过严格测试,确保安全情况下不建议使用)
if(in_array('--help', $argv)) {
    //显示help菜单
    help();
    exit();
}
//开启调试模式
$debug = 0;
if(in_array('--debug', $argv)) {
    unset($argv[array_search("--debug",$argv,true)]);
    $debug = 1;
}
//开启覆盖式重命名,默认是拷贝式重命名
$forceCover = 0;
if(in_array('--force', $argv)) {
    unset($argv[array_search("--force",$argv,true)]);
    $forceCover = 1;
    //让用户确认是否使用--force参数,防止误操作
    fwrite(STDOUT,'您正在使用--force参数,该参数可能导致文件被覆盖且无法恢复,您确认使用吗?yes使用,no不使用:');
    $confirm = strtolower(trim(fgets(STDIN)));
    if($confirm != 'yes' && $confirm != 'y') {
        //不使用
        $forceCover = 0;
    }
}
//--rsort把文件按自然排序倒序,默认是按自然排序正序
$sortType = 'sort';
if(in_array('--rsort', $argv)) {
    unset($argv[array_search("--rsort",$argv,true)]);
    $sortType = 'rsort';
}
//获取命令行参数,建议加“”防止字符被shell解析
$argv = array_values($argv);
$from = $argv[1]??'';
if($from == "*" || $from == "*.*"){
    $from = ".*";
}
$to = $argv[2]??'';
//path默认为当前目录
$path = $argv[3]??'';
$path = $path ? rtrim($path, '/') . '/' : '';
if(!$from||!$to){
    //参数错误报错并显示帮助
    echo "[error] from and to is required.\n";
    help();
    exit();
}
//遍历所有文件并按自然排序
$files = glob("{$path}*");
if($sortType == 'rsort') {
    rsort($files, SORT_NATURAL);
} else {
    sort($files, SORT_NATURAL);
}
//匹配$to中{i10+1}字符串
preg_match("#\{(?<i>[iI])(?<init>(\d+){0,1})(?<op>[+-]{0,1})(?<step>(\d+){0,1})\}#", $to, $toMatches);
//设置初始值
$init = !empty($toMatches['init']) ? intval($toMatches['init']) : 1;
$count = $init ?: 1;
//遍历所有文件名进行替换处理
foreach ($files as $filename) {
    $tofilename = $to;
    //替换$to中{i10+1}字符串
    if(!empty($toMatches)) {
        $tofilename = str_replace($toMatches[0], $count, $tofilename);
    }
    //替换每个文件名的捕获组(即$from正则中的捕获组)
    preg_match("#{$from}#i", $filename, $fromMatches);
    if(!empty($fromMatches)) {
        foreach($fromMatches as $key => $val) {
            //跳过第一个,第一个不是捕获组
            if($key > 0) {
                $tofilename = str_replace("{{$key}}", $val, $tofilename);
            }
        }
    }
    // 根据$to中{i10+1}字符串判断操作方向
    if(!empty($toMatches)) {
        $step = !empty($toMatches['step']) ? intval($toMatches['step']) : 1;
        $op = !empty($toMatches['op']) ? trim($toMatches['op']) : "+";
        if($op == "+"){
            $count = $count + $step;
        } else {
            $count = $count - $step;
        }
    }
    //调试时只显示不实际写入
    if($debug) {
        $tofilename = $path.$tofilename;
        echo "$filename => $tofilename\n";
        continue;
    }
    //写入重名名后的文件
    if($forceCover){
        //覆盖式重命名
        rename($filename, $path.$tofilename);
    } else {
        //拷贝式重命名
        if(!file_exists($path.'renamed/')){
            mkdir($path.'renamed/',0777,true);
        }
        copy($filename, $path.'renamed/'.$tofilename);
    }
}
function help() {
    echo "帮助文档:\n";
    echo "格式:rename from to path from是从什么文件名 to是重命名什么文件名 path是哪个文件夹(path可省略,默认为当前文件夹)\n";
    echo "列如:rename \"(\d+)(.*)\.jpg\" \"{1}.jpg\" {1}代表正则的第一个捕获组,{2},{3}以此类推\n";
    echo "列如:rename \"(\d+).jpg\" \"{i}.jpg\" {i}代表从1开始每个文件增加1,{i10}代表从10开始每个文件加1,{i10+2}代表从10开始加2,{i10-2}代表从10开始减2\n";
    echo "另外: --rsort代表文件名按倒序处理,默认为正序 --debug代表调试,可以打印出哪个文件将会重命名为什么名称的列表 --help是显示帮助文档\n";
    echo "默认重命名后的文件在path目录下的renamed目录里,不会重命名原文件,请确认无误后再拷贝(如需重命名在源文件上,请加--force参数,该参数请谨慎使用,当出现错误时,文件会被覆盖掉且无法恢复,因此非经过严格测试,确保安全情况下不建议使用)\n";
}

以上就是PHP批量文件重命名脚本(支持正则)的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: PHP批量文件重命名脚本(支持正则)

本文链接: https://lsjlt.com/news/204344.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP批量文件重命名脚本(支持正则)
    本篇文章给大家带来了关于PHP的相关知识,其中主要跟大家介绍怎么用PHP实现批量文件重命名脚本,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。PHP批量文件重命名脚本(支持正则)如题。【免责声明】请了解怎么使用和正则的情况下谨慎使用,由...
    99+
    2023-05-14
    正则 php 重命名
  • PHP批量文件重命名脚本怎么写
    这篇“PHP批量文件重命名脚本怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP批量文件重命名脚本怎么写”文章吧。P...
    99+
    2023-07-05
  • python文件名批量重命名脚本实例代码
    python文件名批量重命名脚本 #encoding=utf-8 import cv2 import os import shutil base_dir = r'文件所在的文件...
    99+
    2024-04-02
  • Shell脚本批量重命名文件后缀的3种实现
    今天突然间想起昨天有个问题还没动手实践下,就是利用shell批量修改文件的后缀,现在动手实践一下。 需求:家目录下有一些sql文件,想批量重命名成txt的 1、find + xargs +sed find...
    99+
    2022-06-04
    后缀 批量 脚本
  • python3批量为文件重命名
    简介 为什么使用python批量重命名而没有使用shell,python对文字的处理更灵活,对于文件名中的空格不会出现报错。 代码: #!/usr/bin/env python # -*- coding:utf-8 -*- """ @aut...
    99+
    2023-01-31
    批量 重命名 文件
  • 教你如何利用bat脚本批量 重命名/复制 文件
    在平时运维的时候,最繁琐的就是要每个月写运维记录的文档如excel表格,一个月30日要产生30个文件,拷30个运维记录文档的模版再进行重命名实在太麻烦了,所以想到copy模版之后可以...
    99+
    2022-12-29
    bat脚本批量 重命名 bat批量复制文件 bat脚本拷贝文件
  • python实现文件批量重命名
    本文实例为大家分享了python实现文件批量重命名,供大家参考,具体内容如下 讲解 1、库:os 2、代码效果:对指定文件夹内所有文件重命名为1,2,3… 3、代码原理:使用os.l...
    99+
    2024-04-02
  • shell如何批量重命名文件
    这篇文章将为大家详细讲解有关shell如何批量重命名文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。批量重命名文件为所有txt文件加上.bak 后缀:rename&nb...
    99+
    2024-04-02
  • python 批量重命名移动文件
    目录一、需求描述二、前置知识和数据准备2.1 生成大量随机文件2.2 重命名文件/文件夹2.3 移动文件/文件夹2.4 遍历获取文件三、代码实现今天介绍的案例是如何利用Python来...
    99+
    2024-04-02
  • Win10如何批量重命名文件
    小编给大家分享一下Win10如何批量重命名文件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体步骤如下:全选你想重命名的文件,如下图在选中状态的一个文件上点右键,选择重命名,如下图一个文件改好新名称后,其他文件依次被序号...
    99+
    2023-06-14
  • Linux怎么批量重命名文件
    本文小编为大家详细介绍“Linux怎么批量重命名文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux怎么批量重命名文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。通过rename命令批量重命名文件基本...
    99+
    2023-06-28
  • win7怎么批量重命名文件
    这篇文章主要介绍了win7怎么批量重命名文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win7怎么批量重命名文件文章都会有所收获,下面我们一起来看看吧。鼠标点击打开存放系列文件的文件夹,左键点击要排列的第一...
    99+
    2023-06-28
  • python怎么批量重命名文件
    你可以使用os模块来批量重命名文件。以下是一个示例代码,可以把文件夹下的所有文件名中的指定字符串替换为新的字符串:pythonimp...
    99+
    2023-10-18
    python
  • python实现批量重命名文件
    #!/usr/bin/env python # -*- coding:UTF-8 -*- import os # 第一种方法 files = os.listdir('.') i = 1 for f in files:     filenam...
    99+
    2023-01-31
    批量 重命名 文件
  • Win10怎么批量重命名文件? win10文件夹重命名的教程
    大家在用电脑时,经常会遇到需要批量重命名文件的问题。如果文件不多还好办,不然挨个重命名是很麻烦的事。所以,掌握重命名小技巧还是非常有必要的。下面我们就向大家介绍一下这个简单实用的方法,适用于Win7/Win8.1/Win...
    99+
    2023-05-20
    Win10 重命名
  • node中怎么批量重命名文件
    这篇文章给大家介绍node中怎么批量重命名文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。实现思路整理了一下思路很简单,就是先把原文件的文件名读取出来放入一个数组,再把新名字作为一个...
    99+
    2024-04-02
  • Linux下如何批量重命名文件
    这篇文章给大家分享的是有关Linux下如何批量重命名文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在 Linux 中,我们对文件进行重命名一般都会使用到 mv 命令,这在对单个文件重命名时非常方便。但是,若我...
    99+
    2023-06-27
  • 怎么用批处理重命名文本文件名
    这篇文章主要为大家展示了“怎么用批处理重命名文本文件名”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用批处理重命名文本文件名”这篇文章吧。实现代码1@echo off&se...
    99+
    2023-06-09
  • Shell脚本批量重命名文件后缀的3种实现方法介绍
    本篇内容主要讲解“Shell脚本批量重命名文件后缀的3种实现方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Shell脚本批量重命名文件后缀的3种实现方法介绍”吧!需求:家目录下有一些sq...
    99+
    2023-06-09
  • 怎么在VBS中批量重命名文件
    这篇文章给大家介绍怎么在VBS中批量重命名文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。核心函数'选择我的电脑作为根目录,来选择目录Const MY_COMPUTER = &a...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作