ファイル名を一括で変更するアプリです。探せばいくらでもあると思いますが、自作してみました。
ファイル名の最初や最後に文字列を追加したり、変更することができます。拡張子は別に処理をします。
ファイル名の最初に文字列を追加するメソッドです。
1 2 3 4 5 6 7 8 9 |
string AddFirstFileName(string filePath, string addString) { FileInfo info = new FileInfo(filePath); string fileName = info.Name; string dirPath = info.DirectoryName; return dirPath + "\\" + addString + fileName + info.Extension; } |
ファイル名の最後に文字列を追加するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
string AddLastFileName(string filePath, string addString) { FileInfo info = new FileInfo(filePath); // 拡張子のないファイル名だけ取得する string fileName = info.Name; string dirPath = info.DirectoryName; int index = fileName.LastIndexOf('.'); if (index != -1) { fileName = fileName.Substring(0, index); } return dirPath + "\\" + fileName + addString + info.Extension; } |
ファイル名の一部を置換するメソッドです。拡張子は変換しません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
string ReplaceFileName(string filePath, string oldString, string newString) { if (oldString == "") return filePath; FileInfo info = new FileInfo(filePath); // 拡張子のないファイル名だけ取得する string fileName = info.Name; string dirPath = info.DirectoryName; int index = fileName.LastIndexOf('.'); if (index != -1) { fileName = fileName.Substring(0, index); } fileName = fileName.Replace(oldString, newString); return dirPath + "\\" + fileName + info.Extension; } |
拡張子がoldExtensionのときにnewExtensionに変更するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
string ChangeExtension(string filePath, string oldExtension, string newExtension) { if (oldExtension.Length > 0 && oldExtension.Substring(0, 1) != ".") oldExtension = "." + oldExtension; if (newExtension.Length > 0 && newExtension.Substring(0, 1) != ".") newExtension = "." + newExtension; FileInfo info = new FileInfo(filePath); if (info.Extension != oldExtension) return filePath; // 拡張子のないファイル名だけ取得する string fileName = info.Name; string dirPath = info.DirectoryName; int index = fileName.LastIndexOf('.'); if (index != -1) { fileName = fileName.Substring(0, index); } return dirPath + "\\" + fileName + newExtension; } |
あとはパネルの上にドロップされたらファイルパスを取得して処理をおこないます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void panel1_DragOver(object sender, DragEventArgs e) { if(e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; } private void panel1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop); List<FilePathInfo> infos = new List<FilePathInfo>(); List<string> newPaths = new List<string>(); string dirPath = ""; foreach (string filePath in filePaths) { FileInfo info = new FileInfo(filePath); if (info.Attributes.HasFlag(FileAttributes.Directory)) continue; string newPath = filePath; dirPath = info.DirectoryName; if (oldString.Text != "") newPath = ReplaceFileName(newPath, oldString.Text, newString.Text); if (preString.Text != "") newPath = AddFirstFileName(newPath, preString.Text); if(afterString.Text != "") newPath = AddLastFileName(newPath, afterString.Text); if (checkBoxExtension.Checked) newPath = ChangeExtension(newPath, oldExtension.Text, newExtension.Text); // 変更される前と後のファイルパスをセットにして保存 infos.Add(new FilePathInfo(filePath, newPath)); newPaths.Add(newPath); } // 変更先に同名のファイルがないことを確認 string[] dirFiles = Directory.GetFiles(dirPath); if (newPaths.Intersect(dirFiles).Count() > 0) { MessageBox.Show("変更後のファイル名が同一フォルダ内に存在します", "", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // ファイル名を変更 foreach (var info in infos) { File.Move(info.oldPath, info.newPath); } Task.Run(() => { MessageBox.Show("完了しました"); }); } } } |
File.Moveメソッドでファイル名を変更していますが、同名のファイルが存在する場合、処理ができません。そこで変更後のファイル名がドラッグされたファイルが存在するフォルダ内に存在しないことを確認してから処理をおこなっています。
以下は変更される前と後のファイルパスを保存するためのクラスです。
1 2 3 4 5 6 7 8 9 10 |
class FilePathInfo { public FilePathInfo(string oldPath0, string newPath0) { oldPath = oldPath0; newPath = newPath0; } public string oldPath = ""; public string newPath = ""; } |