3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windowsでファイル名に更新日時を追加する処理を右クリックからするやつ(Windows10 / 11)

Last updated at Posted at 2023-03-08

とても頭が悪そうなタイトル(小並感)

やりたいこと

  • Windowsのエクスプローラでファイルを右クリックしたら出てくるやつ(コンテキストメニュー)から、1クリックでファイル名に更新日時をつけたい
    • 右クリックしたらこんなの↓が出てきて、これをクリックしたらファイル名が勝手に変わる
      コンテキストメニュー
    • MacだとAutomatorとかいう神アプリで難なくできるけど、Windowsだとそんなアプリない(あったら教えてください)
    • batファイル作ってファイルをD&Dするのは、いちいちbatファイルがあるフォルダを開かないといけないから面倒

どこかに右クリックから1クリックで更新日時つけてファイル名変えてくれるアプリねぇかなあああああ

……

よし、自分でつくろう!

できたもの

できたもの動画

環境

  • Windows 10 Pro
    • Windows 11 Proでもできなくはないが、ここでの説明は概ねWindows 10での話
    • Windows 11についてはここを参照

用意するもの

  • テキストエディタ

作業手順

1. バッチファイルを作る

とりあえず、ファイル入力を受けてファイル名に更新日時をつけてくれるバッチファイルを作ります。

addUpdateDate.bat
@echo off

rem =====(1)=====
rem コマンドプロンプトのウィンドウを最小化した状態で再帰呼び出し
@if not "%~0"=="%~dp0.\%~nx0" start /min cmd /c,"%~dp0.\%~nx0" %* & goto :eof

rem エラー処理:引数がない場合は終了する
if "%~1"=="" (
  exit /b
)

rem =====(2)=====
rem ファイルの更新日時を取得する。フォーマットは YYYY/MM/DD HH:MM
set str_datetime=%~t1

rem 取得した更新日時から余計な記号を消して、ファイル名につける形にする
rem まずは / を削除
set str_datetime=%str_datetime:/=%

rem 次に : を削除
set str_datetime=%str_datetime::=%

rem 最後に半角スペースを - に変更
set str_datetime=%str_datetime: =-%

rem ここまでで、str_datetime に YYYYMMDD-HHMM というフォーマットで数字が代入された

rem =====(3)=====
rem 変更前のファイルのフルパスを取得(例:C:\...\hoge\fuga.txt)
set str_oldfile=%~1

rem ファイル名(fuga)を str_new_fn に、拡張子(.txt)を str_new_ex にそれぞれ代入
set str_new_fn=%~n1
set str_new_ex=%~x1

rem 更新後のファイル名を str_newfile に代入。フォーマットは [str_new_fn]_[str_datetime][str_new_ex](fuga_YYYYMMDD-HHMM.txt)
set str_newfile=%str_new_fn%_%str_datetime%%str_new_ex%

rem ==========
rem ファイルをそのままリネームする場合はAを、ファイルをコピーした上でリネームする場合はBを記述
rem ==========

rem A. 指定したファイル名 str_newfile に変更
ren "%str_oldfile%" "%str_newfile%"

rem B. 指定したファイル名 str_newfile としてコピーを保存
copy "%str_oldfile%" "%str_newfile%"

参考に 丸パクリしました:

コードの内容

(1) は、バッチ処理時に一瞬だけ画面に出てくるコマンドプロンプトの画面がどうしても許せなかったので、それを非表示にするためのコードです。
タスクバーに出現することは止められませんが、あの黒い画面が一瞬でも出現することはなくなったので精神衛生的にかなりいいです。

参考に 丸パクリしました:

(2) でファイル名やら更新日時やらを取得しています。
最初、更新日時を取得したあと文字の切り出しで年月日などを取得しようと思いましたが、 参考元 丸パクリ元がとても綺麗な置換をされていたので 参考に 丸パクリしました。

(3) でファイル名置換のための処理を行っています。ここは特に言うことはありません。

一応この時点で、作成した addUpdateDate.bat にファイルをD&Dすれば、ファイル名に更新日時をつけるという挙動をします。
「右クリックなんてフヨウラ!」という方はここで終了です。お疲れ様でした。

2. バッチファイルを右クリックで呼び出せるようにする

ここからWindowsの火薬庫、レジストリエディタを使用します。
例に漏れず 自己責任 で頑張りましょう。

2-1. レジストリエディタを起動する

Windowsメニューから「レジストリ エディター」と検索すれば出てきます。
もちろん、Win+Rキーで「ファイル名を指定して実行」を呼び出してregeditでも構いません。

2-2. 右クリックを司るレジストリキーに、バッチファイルを呼び出すコンテキストメニューを追加する

ファイルを右クリックして表示されるコンテキストメニューは、コンピューター\HKEY_CLASSES_ROOT\*\shellで設定します。
レジストリエディタ1

参考にしました:

このshellに新しいキーを追加します。
レジストリエディタ2

ここでは、キーの名前をaddUpdateDateとしました。 安直
レジストリエディタ3

このキーの直下に、さらに新しいキーcommandを作成します。名前はcommandから変えてはいけません。
レジストリエディタ4

このキーの中にある(規定)を編集し、次のように値のデータを設定します。
"[addUpdateDate.batのフルパス]" "%V"(例えば"C:\...\hoge\addUpdateDate.bat" "%V"
レジストリエディタ5

これで、ファイルを右クリックしたときにaddUpdateDateというコンテキストメニューが表示されます。
参考に 丸パクリしました:

コンテキストメニューの名前を変えたい場合は、addUpdateDateというキーの名前を変えるか、このキーの中の(規定)を編集し、任意の文字列にします。
例えば以下の画像のようにすると、コンテキストメニューにはファイル名に更新日時を追加(U)と表示されるようになります。

最後に(&[キー])と書くことで、そのキーをショートカットキーとして指定できます。

レジストリエディタ6

これで「Windowsでファイル名に更新日時を追加する処理を右クリックからするやつ」の完成です!

……が、もう少しいじってみます。

3. (オマケ)コンテキストメニューの位置とアイコンを指定する

3-1. コンテキストメニューの位置を指定する

コンテキストメニューで今回のファイル名に更新日時を追加(U)が表示される位置は、概ねレジストリエディタで指定ができます。
addUpdateDateキー内に新たに文字列値を指定し、名前をPosition(変えちゃダメ)、データをTopMiddleBottomのいずれか(これも変えちゃダメ)に指定しましょう。
だいたい「上ほど」「中ほど」「下ほど」にファイル名に更新日時を追加(U)が表示されます(上のGif画像ではBottomと指定しています)

レジストリエディタ7

参考にしました:

3-2. コンテキストメニューのアイコンを指定する

アイコンはWindows標準のアイコンを指定する方法があるのですが、 面倒 超面倒なので自前で用意します。
自前と言っても、フリーで使わせてくれるアイコン屋さんを利用します。
私はここを利用しました:

背景を透過できるpngファイルをico形式に変換すればOKです。
サイズは適当で構いません。コンテキストメニュー上ではいい感じのサイズ感で表示してくれます。
一番最初に出した画像 コンテキストメニュー では128 x 128pxのico画像を利用しています。正直そんなに大きくなくてもいいと思います。

png形式をico形式にする方法ですが、掃いて捨てるほどpng->ico変換してくれるWebサイトがあるのでそれを利用すると良いでしょう。
適当に「png ico 変換」とかググれば出てきます。
自前でできるならそれでも可。

用意したアイコンを読み込むには、位置を指定したときと同様に、レジストリエディタのaddUpdateDateキー内で、新たに文字列値を指定し、名前をIcon(変えちゃダメ)、データをico画像のフルパスを指定します。フルパスを指定するときはダブルクォーテーション" "で囲んであげたほうが安心。

アイコンを指定したとき、一度icoファイルが読み込まれるとどこかのキャッシュに保存されるらしく、同じ名前でico画像を変えても読み込み直ししてくれません。
その場合はファイル名を変更するか、PCを再起動してキャッシュを消すと良いでしょう。
(本当はキャッシュをピンポイントで削除できればよかったけれど、その方法が分からなかった……)

まとめると

コンテキストメニューの位置とアイコンを指定するとこんな↓感じになります。
レジストリエディタ8

Windows 11への 恨み節 対処

Windows 11がこんなに使い勝手が悪いとは思いませんでした(半ギレ)

コンテキストメニューは1階層潜る必要がある

画像のとおりです。
1回「その他のオプションを表示」をクリックして、Windows 10以前の、従来のコンテキストメニューを開かないと出てきません。
じゃあ最初のコンテキストメニューに表示させる方法は?って話なんですが、レジストリエディタで弄れるほど簡単な設定ではないようです。
Windows 11-1

海外の情報共有サイトでも匙が投げられていました:

本当はしたくなかったのですが、しょうがないのでレジストリエディタを弄ってくれるソフトを導入しました:

120円ですが、無期限で無料試用可能なんだそうです。作者サポートをしたい方はお金払いましょう。

設定はあまり難しくありません。説明は他サイトに譲ります。例えば↓:

ちなみに私の設定はこんな感じです。ちなみにレジストリエディタを直接弄る際には利用できたショートカットキーの設定はできません。
custom context menu

これで1回目のコンテキストメニューにファイル名に更新日時を追加が表示されます。Windows 11-2

うまく行かない人は左下の「Cache」をOnにしてみるといいかもしれません。

ちなみに、巷では1回目の右クリックで表示されるコンテキストメニューをWindows 10のように戻す方法も数多く挙げられていますが、個人的にはWindows 11のスッキリとしたメニューが好きなので、その方法は採っていません。

start \min cmd が効かない

バッチファイルの(1)で利用した、コマンドプロンプトを最小化した処理ですが、Windows 11では通用しません。
つまり実行のたびにあの黒い画面が一瞬表示されます。 ウザい

おしまい!

久々にまともなネタを書いた気がします(ただの備忘録)。
しかしWindows 11は細かいところの設定が効きませんね。 まるでMacのよう。
まぁMicrosoft側からしたら下手にカスタマイズされるのも面白くないんでしょうけれど。
いいから早くタスクバーを画面左右とか上に固定できるようにしろ。

というわけで、【Windowsでファイル名に更新日時を追加する処理を右クリックからするやつ】でした。
「そんなん知っとるわボケ」とか「Qiitaに書くようなことじゃねえよ帰れ」とかいうのは……どうか心の内におしまいください。

3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?