我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP批量文件重命名脚本怎么写

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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批量文件重命名脚本怎么写”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP批量文件重命名脚本怎么写

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP批量文件重命名脚本怎么写

这篇“PHP批量文件重命名脚本怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP批量文件重命名脚本怎么写”文章吧。P
2023-07-05

python怎么批量重命名文件

你可以使用os模块来批量重命名文件。以下是一个示例代码,可以把文件夹下的所有文件名中的指定字符串替换为新的字符串:pythonimport osdef batch_rename(directory, old_str, new_str):fo
2023-10-18

win7怎么批量重命名文件

这篇文章主要介绍了win7怎么批量重命名文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win7怎么批量重命名文件文章都会有所收获,下面我们一起来看看吧。1.鼠标点击打开存放系列文件的文件夹,左键点击要排列的
2023-06-28

Linux怎么批量重命名文件

本文小编为大家详细介绍“Linux怎么批量重命名文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux怎么批量重命名文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。通过rename命令批量重命名文件基本
2023-06-28

Shell脚本批量重命名文件后缀的3种实现

今天突然间想起昨天有个问题还没动手实践下,就是利用shell批量修改文件的后缀,现在动手实践一下。 需求:家目录下有一些sql文件,想批量重命名成txt的 1、find + xargs +sedfind /root -name ‘*.sql
2022-06-04

怎么用批处理重命名文本文件名

这篇文章主要为大家展示了“怎么用批处理重命名文本文件名”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用批处理重命名文本文件名”这篇文章吧。实现代码1@echo off&setlocal en
2023-06-09

Win10怎么批量重命名文件? win10文件夹重命名的教程

大家在用电脑时,经常会遇到需要批量重命名文件的问题。如果文件不多还好办,不然挨个重命名是很麻烦的事。所以,掌握重命名小技巧还是非常有必要的。下面我们就向大家介绍一下这个简单实用的方法,适用于Win7/Win8.1/Win10系统。具体步骤如
2023-05-20

教你如何利用bat脚本批量 重命名/复制 文件

这篇文章主要介绍了如何利用bat脚本批量重命名/复制文件,其实与其重命名文件,大家也可以考虑用复制文件办法,这样就不用考虑重命名时候的溢出问题,下面给出文件复制的办法,需要的朋友可以参考下
2022-12-29

怎么在VBS中批量重命名文件

这篇文章给大家介绍怎么在VBS中批量重命名文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。核心函数选择我的电脑作为根目录,来选择目录Const MY_COMPUTER = &H11&Const WINDOW_HAND
2023-06-08

怎么使用shell批量重命名文件

要使用shell批量重命名文件,可以使用for循环结合mv命令来实现。以下是一个简单的示例:假设要将所有以.txt结尾的文件批量重命名为以.bak结尾的文件,可以使用以下命令:for file in *.txt; domv "$file
怎么使用shell批量重命名文件
2024-03-07

python3批量为文件重命名

简介为什么使用python批量重命名而没有使用shell,python对文字的处理更灵活,对于文件名中的空格不会出现报错。代码:#!/usr/bin/env python# -*- coding:utf-8 -*-"""@author:Ai
2023-01-31

python实现批量重命名文件

#!/usr/bin/env python# -*- coding:UTF-8 -*-import os# 第一种方法files = os.listdir('.')i = 1for f in files:    filename, extn
2023-01-31

Win10如何批量重命名文件

小编给大家分享一下Win10如何批量重命名文件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体步骤如下:1、全选你想重命名的文件,如下图2、在选中状态的一个文件上点右键,选择重命名,如下图3、一个文件改好新名称后,其他文
2023-06-14

Linux中怎么对文件进行批量重命名

Linux中怎么对文件进行批量重命名,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。当你想要重命名多个文件的时候,rename 工具或许是最简单、最安全和最强大的
2023-06-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录