アプリで解決しよう

 

 

写真のメタデータには撮影日が登録されています

この情報を使ってファイル名を変更します

 

フォルダーを指定して、フォルダー内のファイルをリネイムします

 

ーー>

 

using System;
using System.Diagnostics;
using MetadataExtractor;
using MetadataExtractor.Formats.Exif;


namespace DSC_rename
{
    public partial class Form1 : Form
    {
        String picdir;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            picdir = System.Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
            textBox1.Text = picdir;

        }
        private void Getfiles()
        {
            String t = "_";
            picdir = textBox1.Text;
            string[] names =System.IO.Directory.GetFiles(picdir, "*.*");
            int n = 0;
            foreach (string name in names)
            {
               int p = name.IndexOf(t);
                
                if (p != -1)
                {
                    string nname = name.Substring(p);
                    FileInfo fi = new FileInfo(name);
                    string cdate = (fi.CreationTime.ToString());

                    var directories = ImageMetadataReader.ReadMetadata(name);
                    string dateTaken = GetTag(directories, ExifDirectoryBase.TagDateTimeOriginal);
                    String[] w = dateTaken.Split(" ");
                    if (dateTaken != "")
                    {
                        cdate = w[0] + "_" + w[1];
                        cdate = cdate.Replace("/", "");
                        cdate = cdate.Replace(":", "");
                    }

                    System.IO.Directory.Move(name, picdir + "\\" + cdate +  nname);
                    //Debug.Print(c + "_" + nname);
                    n++;
                }
            }
            label1.Text = n.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Getfiles();
        }
        static string GetTag(IReadOnlyList<MetadataExtractor.Directory> dirs, int tagId)
        {
            foreach (var dir in dirs)
            {
                if (dir.ContainsTag(tagId))
                {
                    // XP 系タグは UTF-16LE の byte[] → string
                    if (dir is ExifIfd0Directory && tagId is ExifDirectoryBase.TagWinSubject
                                                 or ExifDirectoryBase.TagWinKeywords
                                                 or ExifDirectoryBase.TagWinComment)
                    {
                        var bytes = dir.GetByteArray(tagId);
                        return System.Text.Encoding.Unicode.GetString(bytes).Trim('\0');
                    }

                    return dir.GetDescription(tagId) ?? "";
                }
            }
            return "";
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            var dialog = new FolderBrowserDialog
            {
                Description = "フォルダーを選択してください",
                ShowNewFolderButton = true
            };

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                string path = dialog.SelectedPath;
                //Console.WriteLine($"選択されたフォルダー: {path}");
                textBox1.Text = path;
            }

        }
    }
}