今日の日付のフォルダ、たとえばこれ書いているのが2013年7月2日なので
20130702
なんてフォルダを今開いているフォルダに作りたいことが多々ある。
あまりにも多々あるので、新規作成>フォルダ>日付入力 ってやるのが面倒くさくなってきた。
これをコンテキストメニューでできないかな?と考えた。
A.コンテキストメニューに追加
B.コンテキストメニューの「新規作成」の中に「今日の日付のフォルダ」を追加
などと考えてみたが、C#でやろうとしても結局レジストリの操作になるっぽい。
なんかやだな。
そこで、コンテキストメニューの「送る」に何か追加して、そこに任意のフォルダを送りつけるとフォルダを作ってくれるようにしてはどうか?と考えた。「送る」メニューだったら、ユーザフォルダの「SendTo」に追加するだけだもんね。除去したいときもそこから消すだけ。安心&楽チン。
C#で実装しようと考えたが、よく考えたらこの程度のことはバッチファイルで十分だ。
MakeTodaysFolder.bat というファイル名で以下を入力。
cd %1 mkdir %date:~-10,4%%date:~-5,2%%date:~-2,2%
こいつを適当なフォルダ(あるいはSendToに直接)置いて、適当なフォルダに置いた場合はSendToにショートカットを作る。
これでボクはハッピーになれると、こういうわけだー。ぬははは。
★ ★ ★
……がっでーむ!
これじゃあUNCに対応できてないよぉ;;
ファイルサーバのフォルダ内に作りたいこととか多々あるのに。
と、いうわけでバッチファイルを次のように変更。
mkdir %1\%date:~-10,4%%date:~-5,2%%date:~-2,2%
よし、これでファイルサーバが対象でもだいじょぶ!
上記の方法だと作成したいフォルダを右クリックしないといけないです。
作成したいフォルダの内容がすでにエクスプローラに表示されているとき、何もないところを右クリックして作成していきたいです。
というわけで、以下を試してみました。
これ、UNCも大丈夫な模様。 しかし、これだと
新規 フォルダー(yyyyMMdd形式).aaaafolder_yyyyMMdd..20130711
なんてフォルダ名になっちゃう。単純に
20130711
ってなってほしいのに。
%1には「新規作成」を発動したフォルダのパス+ "\新規 フォルダー(yyyyMMdd形式).aaaafolder_yyyyMMdd"
が入る模様。仮に、レジストリに書き込む値を
cmd /c md "%%date:~-10,4%%%%date:~-5,2%%%%date:~-2,2%%"
ってやっちゃっちゃうと、変なところにフォルダを作成しようとしてしまい、アクセスが拒否されたりする。
ということは、%1から「新規 フォルダー(yyyyMMdd形式).aaaafolder_yyyyMMdd」をそぎ落とすしかない。
★ ★ ★
そぎ落とすには、「%V:~m,-n% m文字目から、最後のn文字分を除いたもの」をやればいい。
参考:http://www40.atwiki.jp/yasrun/pages/25.html
しかし、%1に対して%1:~m,-n% ってやっても無効みたい。
ということは%1を何か適当な変数に代入してからそれを加工すればいいか?
レジストリにコマンドとして書き込むには1行にまとめる必要がある。じゃあ、マルチステートメントが必要だな。
というわけで、()と&&を使えばマルチステートメントできることを突き止めましたが・・・
(echo a) && (echo b)
ってやると「a」「b」それぞれ表示されるんだけど、
(set V=aaa) && (echo %V%)
ってやると「%V%」って表示されちゃう(=変数Vが設定されていない状態)。だめじゃん。
では、バッチファイルにしてはどうか。
★ ★ ★
以上のことから、以下の結論を得た。
@set V=%1 @mkdir %V:~0,-34%%date:~-10,4%%date:~-5,2%%date:~-2,2%"
cmd /c C:\software\MakeTodaysFolder2.bat "%1"とする。
勝手に「フォルダー(YMD)」などと変えてしまいましたが、本家のとおり「フォルダー(yyyyMMdd形式)」としたい場合はMakerTodaysFolder2.batの「-34」をもうちょっと変えればいいです。