WinBatchMemo04

指定したフォルダに日付フォルダを作成する

今日の日付のフォルダ、たとえばこれ書いているのが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が設定されていない状態)。だめじゃん。

では、バッチファイルにしてはどうか。

★ ★ ★

以上のことから、以下の結論を得た。

  1. バッチファイルを作成する。
    • パス:C:\software\MakeTodaysFolder2.bat
    • 内容
      @set V=%1
      @mkdir %V:~0,-34%%date:~-10,4%%date:~-5,2%%date:~-2,2%"
      
  2. レジストリの設定(一部 http://qiita.com/alg0002@github/items/55e78056c9e3e3952806 より引用)
    1. HKEY_CLASSES_ROOT の下に「Folder.yyyyMMdd」というキーを作成し、(既定)のデータに「フォルダー(YMD)」と入力
    2. HKEY_CLASSES_ROOT の下に「.aaaafolder_yyyyMMdd」というというキーを作成し、(既定)のデータに「Folder.yyyyMMdd」と入力
    3. 前の手順で作成した HKEY_CLASSES_ROOT.aaaafolder_yyyyMMdd の下に「ShellNew」というキーを作成
    4. 前の手順で作成した HKEY_CLASSES_ROOT.aaaafolder_yyyyMMdd.ShellNew に文字列値を追加し、名前を「Command」、データを
      cmd /c C:\software\MakeTodaysFolder2.bat "%1"
      
      とする。

勝手に「フォルダー(YMD)」などと変えてしまいましたが、本家のとおり「フォルダー(yyyyMMdd形式)」としたい場合はMakerTodaysFolder2.batの「-34」をもうちょっと変えればいいです。

最終更新:2013年07月11日 15:39