検索
ホームページバックエンド開発PHPチュートリアルPHP バッチ ファイル名変更スクリプト (正規表現をサポート)

この記事では、PHP に関する関連知識をお届けします。主に、PHP を使用してバッチ ファイル名変更スクリプトを実装する方法を紹介します。興味のある方は、以下をご覧ください。皆さんのお役に立てれば幸いです。

PHP バッチ ファイル名変更スクリプト (正規表現をサポート)

PHP バッチ ファイルの名前変更スクリプト (正規表現をサポート)

前述のとおり。

[免責事項] 使用方法を理解し、慎重に使用してください。これによって引き起こされるいかなる結果も、このプログラムおよびその作者とは何の関係もありません。~

[使用上の注意事項]

形式: rename from to path from どのファイル名からどのフォルダーのパスに変更するか (パスは省略可能、デフォルトは現在のフォルダー)

[例]

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

[さらに]

--rsort はファイル名が逆順に処理されることを意味します。デフォルトは順方向です。 order--debug はデバッグを意味します。どのファイルがどのような名前に変更されるかリストを出力できます。 --help はヘルプ ドキュメントを表示します。

[Others]

デフォルトでは、名前変更されたファイルは、パス ディレクトリの下の名前変更されたディレクトリにあります。元のファイルの名前は変更されません。正しいことを確認して慎重にコピーしてください (ソース ファイルの名前を変更する必要がある場合は、--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(&#39;--help&#39;, $argv)) {
    //显示help菜单
    help();
    exit();
}
//开启调试模式
$debug = 0;
if(in_array(&#39;--debug&#39;, $argv)) {
    unset($argv[array_search("--debug",$argv,true)]);
    $debug = 1;
}
//开启覆盖式重命名,默认是拷贝式重命名
$forceCover = 0;
if(in_array(&#39;--force&#39;, $argv)) {
    unset($argv[array_search("--force",$argv,true)]);
    $forceCover = 1;
    //让用户确认是否使用--force参数,防止误操作
    fwrite(STDOUT,&#39;您正在使用--force参数,该参数可能导致文件被覆盖且无法恢复,您确认使用吗?yes使用,no不使用:&#39;);
    $confirm = strtolower(trim(fgets(STDIN)));
    if($confirm != &#39;yes&#39; && $confirm != &#39;y&#39;) {
        //不使用
        $forceCover = 0;
    }
}
//--rsort把文件按自然排序倒序,默认是按自然排序正序
$sortType = &#39;sort&#39;;
if(in_array(&#39;--rsort&#39;, $argv)) {
    unset($argv[array_search("--rsort",$argv,true)]);
    $sortType = &#39;rsort&#39;;
}
//获取命令行参数,建议加“”防止字符被shell解析
$argv = array_values($argv);
$from = $argv[1]??&#39;&#39;;
if($from == "*" || $from == "*.*"){
    $from = ".*";
}
$to = $argv[2]??&#39;&#39;;
//path默认为当前目录
$path = $argv[3]??&#39;&#39;;
$path = $path ? rtrim($path, &#39;/&#39;) . &#39;/&#39; : &#39;&#39;;
if(!$from||!$to){
    //参数错误报错并显示帮助
    echo "[error] from and to is required.\n";
    help();
    exit();
}
//遍历所有文件并按自然排序
$files = glob("{$path}*");
if($sortType == &#39;rsort&#39;) {
    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[&#39;init&#39;]) ? intval($toMatches[&#39;init&#39;]) : 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[&#39;step&#39;]) ? intval($toMatches[&#39;step&#39;]) : 1;
        $op = !empty($toMatches[&#39;op&#39;]) ? trim($toMatches[&#39;op&#39;]) : "+";
        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.&#39;renamed/&#39;)){
            mkdir($path.&#39;renamed/&#39;,0777,true);
        }
        copy($filename, $path.&#39;renamed/&#39;.$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 ビデオ チュートリアル

以上がPHP バッチ ファイル名変更スクリプト (正規表現をサポート)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はlearnkuで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
PHP依存性噴射コンテナ:クイックスタートPHP依存性噴射コンテナ:クイックスタートMay 13, 2025 am 12:11 AM

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

PHPの依存噴射対サービスロケーターPHPの依存噴射対サービスロケーターMay 13, 2025 am 12:10 AM

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

PHPパフォーマンス最適化戦略。PHPパフォーマンス最適化戦略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPメールの検証:電子メールが正しく送信されるようにしますPHPメールの検証:電子メールが正しく送信されるようにしますMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

PHPアプリケーションをより速くする方法PHPアプリケーションをより速くする方法May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster、followthesesteps:1)useopcodecachinglikeopcacheTostoredscriptbytecode.2)最小化abasequeriesecachingingindexing.3)leveragephp7機能forbettercodeefficiency.4)

PHP依存性インジェクション:コードのテスト可能性を改善しますPHP依存性インジェクション:コードのテスト可能性を改善しますMay 12, 2025 am 12:03 AM

依存性注入(DI)は、明示的に推移的な依存関係によりPHPコードのテスト可能性を大幅に改善します。 1)DI分離クラスと特定の実装により、テストとメンテナンスが柔軟になります。 2)3つのタイプのうち、コンストラクターは、状態を一貫性に保つために明示的な式依存性を注入します。 3)DIコンテナを使用して複雑な依存関係を管理し、コードの品質と開発効率を向上させます。

PHPパフォーマンスの最適化:データベースクエリの最適化PHPパフォーマンスの最適化:データベースクエリの最適化May 12, 2025 am 12:02 AM

DatabaseQueryoptimizationInpholvesseveralstrategESTOEnhancePerformance.1)selectonlynlynlyndorycolumnStoredatedataTransfer.2)useindexingtospeedupdataretrieval.3)revenmecrycachingtostoreres sultsoffrequent queries.4)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境