アプリで解決しよう
写真のメタデータには撮影日が登録されています
この情報を使ってファイル名を変更します
フォルダーを指定して、フォルダー内のファイルをリネイムします
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;
}
}
}
}



