プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Windowsバッチファイル(.bat)、PHPを使って半角カナのファイル名を全角にする
半角カナで名前を付けたファイルが、たくさ~~~~んありましてね。
それを全角カナに変えたいのだそうです。

ふ~ん、やれば?(--)

……と突き放すのも可哀想なので、作ってあげましたよ。
ファイ名の半角カナを全角カナに変えてくれるバッチファイル(?)を(--)b

とはいえ、何故かxampp環境、つまりPHPが入っている環境だったので、
PHPでやっちゃったんですけどね(^^ゞ
PHPの「mb_convert_kana()」を使っておけば半角カナ以外にもいろいろ変換できるから、
というのが、その理由です。

それでは早速、こんなコードですφ(--)

■c:\test\test01.php
<?php

    if($argc > 1){    // 引数あり
        // ファイル名取得
        $filePath = $argv[1];

        // ファイル存在チェック
        if(file_exists($filePath)){
            //ファイルあり

            //元ファイル名(パス無し)
            $fileName = basename($filePath);
            //変換後ファイル名(パス無し)
            $fileNameAfter = mb_convert_kana($fileName, "KV", "sjis-win");
            //変換後ファイル名(パス有り)
            $filePathAfter = pathinfo($filePath, PATHINFO_DIRNAME) . '\\' . $fileNameAfter;

            //ファイルコピー
            if(copy($filePath, $filePathAfter)){
//とりあえず削除しないできますね
//                //元ファイル削除
//                unlink($filePath);

                print "成功だよ";
            }else{
                print "失敗だよ";
            }
        }else{
            //ファイルなし
            print "ファイルないよ";
        }

    }
?>

■c:\test\test01.bat
@echo off

REM php.exeへのパス
set php_exe_path=c:\xampp\php\php.exe

REM 処理するPHPファイルへのパス
set php_script_path=c:\test\test01.php

REM 実行
%php_exe_path% %php_script_path% %1

pause

PHP側でやっていることは

1.処理対象ファイルの存在チェック
2.パスからファイル名を抜き出す
3.抜き出したファイル名を「mb_convert_kana()」で変換
4.元ファイルを「3.」で作成したファイル名でコピー

です。
バッチファイルは、そのPHPファイルを呼び出しているだけですね。

変換対象のファイルは引数で指定するようにしてありますが、

Windows、バッチファイル(.bat)で、フォルダ内のすべてのテキストファイル(.txt)を再帰的に取得し、ファイル名と行数を表示する

とか

PHP、指定フォルダ内のファイルリストを再帰的に取得

とかと組み合わせれば、フォルダ指定で全ファイル一気に置き換えることもできます。

注意点としては「ファイルのタイムスタンプが保持されないこと」です。
PHPの「copy()」関数を使うと、ファイルのタイムスタンプがコピー時点のものに書き換わります。
これは

1.元ファイルのタイムスタンプを取得
2.ファイルコピー
3.コピー先のファイルへ「touch()」関数を使って反映

とすれば回避できるはずです。
今回はそこまで求められなかったので、私は試していません。
ごめんなさい。

ちなみに、私が慣れているからPHPでやっただけなので、別にVBScriptでやっても良いです。
というか、PHPは基本的にWebが主戦場なので、本当はVBScriptでやった方が良いんでしょうね(^^;

まぁ、ドンマイです(--)ノ

いずれにせよ、バッチファイルで凝ったことをやろうとするよりは、
外部プログラムに処理させて、バッチファイルは呼出担当にした方が
無難だと思いますよ。

取りあえず、そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:コマンド/バッチ  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事