とても頭が悪そうなタイトル(小並感)
やりたいこと
- Windowsのエクスプローラでファイルを右クリックしたら出てくるやつ(コンテキストメニュー)から、1クリックでファイル名に更新日時をつけたい
どこかに右クリックから1クリックで更新日時つけてファイル名変えてくれるアプリねぇかなあああああ
……
よし、自分でつくろう!
できたもの
環境
- Windows 10 Pro
- Windows 11 Proでもできなくはないが、ここでの説明は概ねWindows 10での話
- Windows 11についてはここを参照
用意するもの
- テキストエディタ
作業手順
1. バッチファイルを作る
とりあえず、ファイル入力を受けてファイル名に更新日時をつけてくれるバッチファイルを作ります。
@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
で設定します。
参考にしました:
ここでは、キーの名前をaddUpdateDate
としました。 安直
このキーの直下に、さらに新しいキーcommand
を作成します。名前はcommand
から変えてはいけません。
このキーの中にある(規定)
を編集し、次のように値のデータを設定します。
"[addUpdateDate.batのフルパス]" "%V"
(例えば"C:\...\hoge\addUpdateDate.bat" "%V"
)
これで、ファイルを右クリックしたときにaddUpdateDate
というコンテキストメニューが表示されます。
参考に 丸パクリしました:
コンテキストメニューの名前を変えたい場合は、addUpdateDate
というキーの名前を変えるか、このキーの中の(規定)
を編集し、任意の文字列にします。
例えば以下の画像のようにすると、コンテキストメニューにはファイル名に更新日時を追加(U)
と表示されるようになります。
最後に(&[キー])
と書くことで、そのキーをショートカットキーとして指定できます。
これで「Windowsでファイル名に更新日時を追加する処理を右クリックからするやつ」の完成です!
……が、もう少しいじってみます。
3. (オマケ)コンテキストメニューの位置とアイコンを指定する
3-1. コンテキストメニューの位置を指定する
コンテキストメニューで今回のファイル名に更新日時を追加(U)
が表示される位置は、概ねレジストリエディタで指定ができます。
addUpdateDate
キー内に新たに文字列値
を指定し、名前をPosition
(変えちゃダメ)、データをTop
、Middle
、Bottom
のいずれか(これも変えちゃダメ)に指定しましょう。
だいたい「上ほど」「中ほど」「下ほど」にファイル名に更新日時を追加(U)
が表示されます(上のGif画像ではBottom
と指定しています)
参考にしました:
3-2. コンテキストメニューのアイコンを指定する
アイコンはWindows標準のアイコンを指定する方法があるのですが、 面倒 超面倒なので自前で用意します。
自前と言っても、フリーで使わせてくれるアイコン屋さんを利用します。
私はここを利用しました:
背景を透過できるpngファイルをico形式に変換すればOKです。
サイズは適当で構いません。コンテキストメニュー上ではいい感じのサイズ感で表示してくれます。
一番最初に出した画像 では128 x 128pxのico画像を利用しています。正直そんなに大きくなくてもいいと思います。
png形式をico形式にする方法ですが、掃いて捨てるほどpng->ico変換してくれるWebサイトがあるのでそれを利用すると良いでしょう。
適当に「png ico 変換」とかググれば出てきます。
自前でできるならそれでも可。
用意したアイコンを読み込むには、位置を指定したときと同様に、レジストリエディタのaddUpdateDate
キー内で、新たに文字列値
を指定し、名前をIcon
(変えちゃダメ)、データをico画像のフルパスを指定します。フルパスを指定するときはダブルクォーテーション" "
で囲んであげたほうが安心。
アイコンを指定したとき、一度icoファイルが読み込まれるとどこかのキャッシュに保存されるらしく、同じ名前でico画像を変えても読み込み直ししてくれません。
その場合はファイル名を変更するか、PCを再起動してキャッシュを消すと良いでしょう。
(本当はキャッシュをピンポイントで削除できればよかったけれど、その方法が分からなかった……)
まとめると
コンテキストメニューの位置とアイコンを指定するとこんな↓感じになります。
Windows 11への 恨み節 対処
Windows 11がこんなに使い勝手が悪いとは思いませんでした(半ギレ)
コンテキストメニューは1階層潜る必要がある
画像のとおりです。
1回「その他のオプションを表示」をクリックして、Windows 10以前の、従来のコンテキストメニューを開かないと出てきません。
じゃあ最初のコンテキストメニューに表示させる方法は?って話なんですが、レジストリエディタで弄れるほど簡単な設定ではないようです。
海外の情報共有サイトでも匙が投げられていました:
本当はしたくなかったのですが、しょうがないのでレジストリエディタを弄ってくれるソフトを導入しました:
120円ですが、無期限で無料試用可能なんだそうです。作者サポートをしたい方はお金払いましょう。
設定はあまり難しくありません。説明は他サイトに譲ります。例えば↓:
ちなみに私の設定はこんな感じです。ちなみにレジストリエディタを直接弄る際には利用できたショートカットキーの設定はできません。
これで1回目のコンテキストメニューにファイル名に更新日時を追加
が表示されます。
うまく行かない人は左下の「Cache」をOnにしてみるといいかもしれません。
ちなみに、巷では1回目の右クリックで表示されるコンテキストメニューをWindows 10のように戻す方法も数多く挙げられていますが、個人的にはWindows 11のスッキリとしたメニューが好きなので、その方法は採っていません。
start \min cmd
が効かない
バッチファイルの(1)で利用した、コマンドプロンプトを最小化した処理ですが、Windows 11では通用しません。
つまり実行のたびにあの黒い画面が一瞬表示されます。 ウザい
おしまい!
久々にまともなネタを書いた気がします(ただの備忘録)。
しかしWindows 11は細かいところの設定が効きませんね。 まるでMacのよう。
まぁMicrosoft側からしたら下手にカスタマイズされるのも面白くないんでしょうけれど。
いいから早くタスクバーを画面左右とか上に固定できるようにしろ。
というわけで、【Windowsでファイル名に更新日時を追加する処理を右クリックからするやつ】でした。
「そんなん知っとるわボケ」とか「Qiitaに書くようなことじゃねえよ帰れ」とかいうのは……どうか心の内におしまいください。