我想要做的是重命名特定文件夾中的所有文件,例如,如果文件名中包含任何數字,它將被刪除。使用正則表達式重命名文件
說,如果一個文件名是 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;
但我不認爲這是應該做的正確方法?有沒有更好的選擇來做到這一點?或者這是最好的(也是唯一的選擇)來做到這一點?另外,在String.Replace中有沒有像IN
?在sql中說我可以在select命令中使用IN
,並指定一堆where條件,但是有沒有像String.Replace這樣的東西,這樣我就不必運行從第7行到第10行的循環了?還有其他更好的選擇嗎?
ps:關於那個正則表達式,我發佈了一個問題Regular Expression for numbers?(顯然我還不夠清楚),從中得到了我的正則表達式,如果你認爲其他正則表達式會更好,請告訴我,如果你需要其他的信息請讓我知道...
Thankx!這是一個錯字。我現在糾正它! :D – Razort4x 2012-04-12 04:26:55