ファイル名を一括変更するバッチを作ってみた
こんにちは。
なんだか急にファイル名を一括で変換したい。
ってことありませんか?
そんな人に朗報です。
ファイル名を変換し、ファイル名の後ろに任意の桁数で番号を割り当てるバッチを作ってみました。
例:サンプル + 3桁の番号
・Aサンプルファイル.txt → サンプル001.txt
・Bサンプルファイル.txt → サンプル002.txt
・Cサンプルファイル.txt → サンプル003.txt
スポンサーリンク
それってどんな時?
写真をパソコンに取り込んだり、仕様書、テストのエビデンスのためのスクリーンキャプチャを大量に取った時ですよね。
他にもあると思いますが。
そんなの便利なフリーソフトを使えばいいじゃん。
って思う方もいらっしゃるかと思いますが、
フリーソフトって、セキュリティ的なあれでインストール出来ない時もありませんか?
そんな時は、Windwos の機能を使って賢く変換しましょう。
DOSコマンドを利用して一括変換するぜ!
現在のように、マウスを使って操作ができるようになる前は全ての操作をコマンド(命令)を入力することで行っていました。
この機能は今でも標準で使えるようになっており、コマンドをどういう順番で、どういう条件で実行するか。
という情報をまとめたファイルを作ると、色々と便利なことができます。
(このファイルをバッチファイルと呼びます)
詳しいことは「Windows バッチ」や、「Windows DOS コマンド」と検索していただければ。
ソースコード
次のコードをコピーして、
メモ帳やエディタソフトなどに張り付け、「xxxxx.bat」という名前で保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | @echo off REM ----------------------------------------------------------------------------------------- REM ファイル名変換バッチ REM ----------------------------------------------------------------------------------------- REM 概要: REM 実行ファイルと同じディレクトリに存在するファイルの名前を REM 指定した文字列+インデックスに置き換えます。 REM ----------------------------------------------------------------------------------------- REM ------------------------------------------------- REM 変数 REM ------------------------------------------------- SETBATCHNAME=%~n0 SETYMD=%date:~-10,4%%date:~-5,2%%date:~-2,2% SETLOGFILE=%BATCHNAME%_%YMD%.log REM * ========================================================================================================= REM * 処理開始 REM * ========================================================================================================= :LA_STARTBATCH cls ECHO ========================================================================================= ECHO ファイル名変換バッチ ECHO. ECHO ----------------------------------------------------------------------------------------- ECHO 実行ファイルと同じディレクトリに存在するファイルの名前を ECHO 指定した文字列+シーケンス番号に一括で置き換えます。 ECHO. ECHO ※シーケンスは最大9桁までとしています。 ECHO ※ファイル名の昇順で処理されます。 ECHO. ECHO ========================================================================================= ECHO. SET/pidir=処理するディレクトリのパスを入力(または[c]キャンセル)⇒ IF'%idir%'=='c'GOTOLA_ENDBATCH SETDIRPATH=%idir% IF'%idir%'==''( SETDIRPATH=%CD% ) ECHO. SET/pifile=新しいファイル名を入力(または[c]キャンセル)⇒ IF'%ifile%'=='c'GOTOLA_ENDBATCH IF'%ifile%'==''GOTOLA_STARTBATCH SETFNAME=%ifile% ECHO. SET/pseq=ファイルに付与するシーケンス桁数を入力(または[c]キャンセル)⇒ IF'%seq%'=='c'GOTOLA_ENDBATCH REM コマンドチェック CALL:LA_INPUT_CHECK%seq%123456789 IF'%seq%'==''GOTOLA_STARTBATCH SETDIGITS=%seq% REM 作業フォルダに移動 IFNOTEXIST%DIRPATH%( ECHO 指定されたディレクトリは存在しません。 GOTOLA_STARTBATCH ) CD%DIRPATH% ECHO [%DATE% %TIME%] バッチ処理開始 > %LOGFILE% ECHO. >> %LOGFILE% ECHO %DIRPATH% >> %LOGFILE% ECHO 上記ディレクトリ内にあるファイルの名前を %FNAME% に %DIGITS% 桁のシーケンスを加えたものに変換します。 >> %LOGFILE% ECHO. ECHO %DIRPATH% ECHO 上記ディレクトリ内にあるファイルの名前を %FNAME% に %DIGITS% 桁のシーケンスを加えたものに変換します。 ECHO. SET/pconfirm=よろしいですか?[y/n]⇒ CALL:LA_INPUT_CHECK%confirm%yn IF'%confirm%'=='n'GOTOLA_CANCELL ECHO. ECHO スタート! setlocalenabledelayedexpansion SETCNT=0 FOR/R%%AIN(*)DO( SETNM=%%~nA IFNOT'%%~xA'=='.log'( IFNOT'%%~nA'=='%BATCHNAME%'( CALL:LA_ZEROPAD!CNT! REMECHO !FNAME!!ZPRET!%%~xA ECHO %%~fA → %%~dpA!FNAME!!ZPRET!%%~xA ECHO %%~fA → %%~dpA!FNAME!!ZPRET!%%~xA >> %LOGFILE% REN"%%~fA""!FNAME!!ZPRET!%%~xA" SET/aCNT=!CNT!+1 ) ) ) ECHO コンプリート! echo. GOTOLA_ENDBATCH EXIT/B REM * ========================================================================================================= REM * ゼロ埋め REM * ========================================================================================================= :LA_ZEROPAD SETNUM=%1 SETZPRET= REM 繰り返し処理 :LA_ZEROPADLOOP CALL:LA_STRLEN%ZPRET%%NUM% if%LEN%lss%DIGITS%( SETZPRET=0%ZPRET% gotoLA_ZEROPADLOOP ) SETZPRET=%ZPRET%%NUM% EXIT/b REM * ========================================================================================================= REM * 文字数取得 REM * ========================================================================================================= :LA_STRLEN SETSLRET=%1 SETLEN=0 REM 繰り返し処理 :STRLENLOOP IFNOT"%SLRET%"==""( SETSLRET=%SLRET:~1% SET/aLEN=%LEN%+1 GOTO:STRLENLOOP ) EXIT/b REM * ========================================================================================================= REM * コマンドチェック REM * ========================================================================================================= :LA_INPUT_CHECK ECHO %2 > tmp.text SETRET= FOR/F"usebackq"%%tIN(`findstr%1tmp.text`)DOSETRET=%%t DELtmp.text if'%RET%'==''( GOTOLA_INPUT_MISSING ) EXIT/b REM * ========================================================================================================= REM * エラー処理 REM * ========================================================================================================= :LA_ERROR echo. echo エラーが発生しました。 echo. gotoLA_ENDBATCH REM * ========================================================================================================= REM * 処理中止 REM * ========================================================================================================= :LA_CANCELL ECHO. ECHO 処理は中止されました。 ECHO. GOTOLA_ENDBATCH REM * ========================================================================================================= REM * 入力ミス REM * ========================================================================================================= :LA_INPUT_MISSING ECHO. SET/pmiss=入力に誤りがあります。 GOTOLA_STARTBATCH REM * ========================================================================================================= REM * バッチ終了処理 REM * ========================================================================================================= :LA_ENDBATCH ECHO. >> %LOGFILE% ECHO [%DATE% %TIME%] バッチ処理終了 >> %LOGFILE% ECHO. SET/pend=終了するにはEnterキーを押してください... EXIT |
何ができるのか
指定したディレクトリ内にあるファイルのファイル名を一括で変換します。
(ファイル名昇順で番号を振ります)
変換時に指定できるのは、「ファイル名」と「シーケンス桁数」となってます。
例えば、ファイル名を「TEST」、シーケンス桁数を「3」とした場合、次のように変換されます。
A.text → TEST000.text
B.text → TEST001.text
C.text → TEST002.text
実行ファイル、および .log ファイルについては対象から除外してあります。
使い方
起動すると
「処理するディレクトリのパスを入力(または [c] キャンセル」と表示されるので、
一括変換したファイルが入っているディレクトリのパスを入力します。
コピーしてペーストすると間違いがないのでお勧めします。
ちなみにコマンドプロンプト上でペーストするには次のようにします。
- マウスを使って普通に張り付ける
コマンドプロンプト上で右クリックをすればできます。 - ショートカットでかっこよく張り付ける
フォーカス(全面に表示され、アクティブになっている)されている状態で、
「ALT」+「SPACE」→「E」→「P」とするとかっこよくペーストできます
続いて、「新しいファイル名を入力(または [c] キャンセル」と表示されるので
ファイル名を入力して Enter を押してください。
最後に、「ファイルに付与するシーケンス桁数を入力(または [c] キャンセル」と表示されるので
ファイル名の後ろにつける番号の桁数を入力し、 Enter を押してください。
処理対象の確認メッセージが表示されるので、問題がなければ「y」を入力して
Enter を押してください。
エラーもなく、「終了するにはEnterキーを押してください…」が表示されれば完了です。
お断り
対象のディレクトリにあるファイルを、ファイル名の昇順で変換していきます。
ファイルを消したりとかはしないので、最悪のことは起きないと思いますが
ファイル名が思ったように変換されなかった等の苦情は受付ませんのでご了承願います。
プログラムについて、こうした方がいい、間違っているなどの情報はありがたく頂戴します。
ディスカッション
コメント一覧
外付けHDD内のフォルダを指定したはずが、デスクトップに置いてあるフォルダやショートカットなどすべての名前が変更されてしまいました。元に戻す方法はありますか?
motoki様
外付けHDDで試したことが無く、想定外の動作をしたようで申し訳ございません。
元に戻す方法ですが、基本的にはありません。
ログが出力されたかと思いますが、そちらからまた復元するしかないかと思います。
お役に立てず申し訳ございません。