我想要做的是重命名所有文件在一个特定的文件夹,例如,如果文件名包含在其中的任何数字,它被删除。
比方说,如果一个文件名是someFileName.someExtension
它仍然是相同的,但如果一个文件是这样的, 03 - Rocketman Elton John
,应该更名为Rocketman Elton John
(我做了部分删除-
另一个例子,如果文件名是15-Trey Songz - Unfortunate (Prod. by Noah 40 Shebib)
应该改名为Trey Songz Unfortunate (Prod. by Noah Shebib)
再次我可以删除-
用户被要求选择这样的文件夹
private void txtFolder_MouseDown(object sender, MouseEventArgs e)
{
FolderBrowserDialog fd = new FolderBrowserDialog();
fd.RootFolder = Environment.SpecialFolder.Desktop;
fd.ShowNewFolderButton = true;
if (fd.ShowDialog() == DialogResult.OK)
{
txtFolder.Text = fd.SelectedPath;
}
}
此外,它重命名这样开始
private void btnGo_Click(object sender, EventArgs e)
{
StartRenaming(txtFolder.Text);
}
和
private void StartRenaming(string FolderName)
{
string[] files = Directory.GetFiles(FolderName);
foreach (string file in files)
RenameFile(file);
}
现在,在重命名文件,我需要的功能,正则表达式将在文件中删除所有号码。 它是这样实现的
private void RenameFile(string FileName)
{
string fileName = Path.GetFileNameWithoutExtension(FileName);
/* here the function goes that will find numbers in filename using regular experssion and replace them */
}
所以我能做的就是,我可以使用类似
1 var matches = Regex.Matches(fileName, @"\d+");
2
3 if (matches.Count == 0)
4 return null;
5
6 // start the loop
7 foreach(var match in matches)
8 {
9 fileName = fileName.Replace(match, ""); /* or fileName.Replace(match.ToString(), ""), whatever be the case */
10 }
11 File.Move(FileName, Path.Combine(Path.GetDirectoryName(FileName), fileName));
12 return;
但我不认为这是应该做的正确方法? 有没有更好的选择,这样做呢? 或者这是最好的(也是唯一的选项)来做到这一点? 此外,有没有像什么IN
在与string.replace? 说,在SQL我可以使用IN
的选择命令,并指定了一堆那里的条件,但有这样的事情有这样与string.replace,我没有跑,我从7号线跑了10环? 是否还有其他更好的选择?
PS:关于正则表达式,我张贴的问题, 对数字的正则表达式? (显然我是不够清晰),并从我得到了我的正则表达式,如果你认为一些其它的正则表达式会做的更好,请告诉我,如果你还需要其他信息,请让我知道...