Help us understand the problem. What is going on with this article?

右クリックでファイル名に日付のサフィックスをつける

More than 1 year has passed since last update.

前回に引き続き、間違った方向に頑張るような話ですが。

ドキュメント管理もすべてgit等のVCSか、google driveのような版数管理可能なファイルシステムを使いたいご時勢ではありますが、実務では「とりあえずファイル名に日付つけとけ」的なシチュエーションが多々あります。

これをWindowsのエクスプローラー上で、右クリックメニューからできるようにしてみます。

動作イメージ

foo.txt に対し、右クリック>「ファイル名に日付を付与」
foo_20181212.txt に!

スクリプト

付与する日付としてファイルの最終更新日を利用する場合、Windows OS上での最終更新日の値を取得できる言語が楽だと思います。
ここではC#でやります。
更新日ではなく、単純に現在の日付を付与するとかでもいいかもしれません。

コンソールアプリケーションとして作成し、実行時の引数としてファイルパスを受け取ります。

受け取ったファイルパスのそれぞれに対し、 Path.GetFullPath でフルパスを取得してから、以下のような感じで変更後のファイルパスを生成します

// baseFile: 変更前のファイルパス
private static string createNewFilePath(string baseFile)
{
    // 最終更新日を取得
    var fileDate = File.GetLastWriteTime(baseFile);
    var dateStr = fileDate.ToString("yyyyMMdd");

    // ファイル名、拡張子、ディレクトリ名に分割
    var baseFileName = Path.GetFileNameWithoutExtension(baseFile);
    var ext = Path.GetExtension(baseFile);
    var dir = Path.GetDirectoryName(baseFile);

    // foo_yyyyMMdd.txt
    var newPathNoSuffix = Path.Combine(dir, string.Format("{0}_{1}{2}", baseFileName, dateStr, ext));

    if (!File.Exists(newPathNoSuffix)) return newPathNoSuffix;

    // 既に同名のファイルがある場合は、追番をつける
    var suffix = 1;
    while (suffix <= 99999) //一応適当な上限
    {
        // foo_yyyyMMdd_n.txt
        var path = Path.Combine(dir, string.Format("{0}_{1}_{2}{3}", baseFileName, dateStr, suffix, ext));
        if (!File.Exists(path)) return path;

        suffix++;
    }

    return null;
}

ソース全体はこちらにあります。

ビルドして exeを作ったら、適当な場所に置いておきます。

右クリックメニューに追加

Winキー+R で「ファイル名を指定して実行」を開き、 regedit と入れて レジストリ エディターを起動します。

HKEY_CLASSES_ROOT > * > shell の下に filedater というキーを追加し、その「値のデータ」に、右クリックメニューに表示する名前をつけます(「ファイル名に日付を付与」とか)。

この filedater の下にさらに command というキーを追加、「値のデータ」に、以下のように exeへのパスを入力します。

"C:\Path\To\FileDater.exe" "%1"

%1 は、右クリックされたファイルのパスを引数として渡すことを意味します。

より詳しくはこちらなどを参考にしてください。

あとがき

※ この記事は個人の見解であり、所属する組織を代表するものではありません。

aakasaka
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした