我有一个包含一些文本文件的目录。我正在尝试以编程方式重命名文件,从01、02、03 ... 103等开始依次进行重命名...
我的目录中有很多文件,但是这些文件的顺序不正确。我想删除其当前序列并从01开始,依此类推。
目前,我已编写了此文件,但它缺少一些内容,无法正常工作。你能为我指出正确的方向吗?
public static void NumberFiles()
{
var files = Directory.GetFiles(@"C:\Test-File", "*.txt");
var filenames = files.Select(Path.GetFileName).ToArray();
int count = 1;
foreach (var f in files)
{
System.IO.File.Move(f, filenames[count -1].Remove(0, 2));
string newFileName = Path.Combine(Path.GetDirectoryName(f), (count + Path.GetFileName(f)));
System.IO.File.Move(f, newFileName);
count++;
}
Console.WriteLine("Job Complete!");
Console.ReadKey();
}
错误:运行此文件时,我找不到文件。
首先,我们应该获取要重命名的文件。我怀疑是否所有* .txt文件都应该移动,可能应该使用一些模式:
string pattern = @"^[0-9]{1,3}\..*Copy \([A-Z0-9]+\)$";
所以我们可以把
var files = Directory
.EnumerateFiles(@"C:\Test-File", "*.txt")
.Where(file => Regex.IsMatch(Path.GetFileNameWithoutExtension(file), pattern))
.Select(file => new {
// C:\Test-File\25.New File - Copy (A4).txt
file = file,
// 25
index = int.Parse(Regex.Match(Path.GetFileName(file), @"^[0-9]+").Value),
// New File - Copy (A4).txt
name = Path
.GetFileName(file)
.Substring(Regex.Match(Path.GetFileName(file), @"^[0-9]+\.").Value.Length)
.Trim()
})
.OrderBy(item => item.index)
.Select((item, i) => new {
// C:\Test-File\25.New File - Copy (A4).txt
oldFile = item.file,
// C:\Test-File\07.New File - Copy (A4).txt
newFile = Path.Combine(
Path.GetDirectoryName(item.file),
$"{i + 1:d2}.{item.name}")
})
.ToArray();
如果我们想看看发生了什么:
foreach (var record in files)
Console.WriteLine($"{record.oldFile} -> {record.newFile}");
最后,循环并移动:
foreach (var record in files)
File.Move(record.oldFile, record.newFile);
Console.WriteLine("Job Complete!");
Console.ReadKey();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句