バッチファイルでファイル名を番号に置き換えてみた

bat bat

バッチファイルを利用してフォルダ内にあるファイルを番号に置き換えてみました。

広告

フォルダ内のファイルを番号に置き換える

以下のコマンドを実行することでフォルダ内のファイルを番号に置き換えることができます。

chcp 65001
//@echo off

setlocal enabledelayedexpansion
set count=1
set path="C:\hogehoge\hogehoge\"
for /f "delims=" %%a in ('dir /b /on !path!') do (
    set num=00!count!
    set num=!num:~-3!
    ren "!path!%%a" "!num!%%~xa"
    set /a count+=1
)

pause

コマンドの解説

setlocal enabledelayedexpansion コマンドでは、! を使った変数展開を有効にして、環境変数の展開を遅延させます。
もう少し分かりやすく言うと、コマンドプロンプトにおいて for や if を利用する際に条件式や処理内で変数を利用できるようにします。

set count=1 コマンドでは、ファイル名に付与する番号を初期化します。
今回は1から番号を付与します。

set path=”C:\hogehoge\hogehoge\” は変更したいフォルダパスを指定します。

次に for を利用して上記で指定したフォルダ内の全てのファイルに対して順番に処理を行います。
for文内の ‘dir /b /on !path!’ では上記のフォルダ内のファイル名を昇順で取得します。

set num=00!count! では、現在の番号を3桁の数字で表すために、左側に0を付けた文字列を生成します。

set num=!num:~-3! では、生成した文字列のうち、最後の3文字だけを取得します。
言い換えると、現在の番号を3桁の数字で表すことになります。

次に ren コマンドを使用して、ファイル名を変更します。
!path!%%a は変更前のファイル名の変数、!num!%%~xa は上記で作成した番号と拡張子の変数となり、ファイル名を番号に変更します。

最後に、set /a count+=1 コマンドを使用して、番号を1つ増やします。

広告

実行結果

実行前のフォルダは以下の通り、文字列でしたが、

番号付与バッチ実行前のフォルダ

実行後には以下のように3桁の番号に置き換えることができました。

番号付与バッチ実行後のフォルダ

今回はフォルダ内のファイルをファイル名昇順で取得しましたが、更新日やサイズでソートして順番を付与することも可能です。

広告

[参考] 元のファイル名も残したい場合

元のファイル名も残したい場合には上記のコマンドを少し変更するだけで可能です。

chcp 65001
//@echo off

setlocal enabledelayedexpansion
set count=1
set path="C:\hogehoge\hogehoge\"
set under="_"
for /f "delims=" %%a in ('dir /b /on !path!') do (
    set num=00!count!
    set num=!num:~-3!
    ren "!path!%%a" "!num!!under!%%a"
    set /a count+=1
)

pause

11行目で変更後のファイル名に元のファイル名の変数を付与するだけです。
また今回は7行目で番号と元のファイル名の間にアンダースコア(_)を入れています。

実行結果

実行前のフォルダは以下の通りですが、

番号とファイル名付与バッチ実行前のフォルダ

実行後には、元のファイル名を残しつつ番号が付与されていることが確認できます。

番号とファイル名付与バッチ実行後のフォルダ

コメント

タイトルとURLをコピーしました