重命名文件夹c#中的文件

我在文件夹中有超过1000个文件,名称为abc_1,abc_2 … abc_n

我想从所有文件中删除此前缀’abc_’。 任何机会不做这个manualy因为他们超过1000并将是痛苦。

怎么用c#做到这一点?

您可以尝试使用此代码

DirectoryInfo d = new DirectoryInfo(@"C:\DirectoryToAccess"); FileInfo[] infos = d.GetFiles(); foreach(FileInfo f in infos) { File.Move(f.FullName, f.FullName.Replace("abc_","")); } 

您应该查看DirectoryInfo类和GetFiles()方法。 并查看提供Move()方法的File类。

 File.Move(oldFileName, newFileName); 

以下代码将工作,但未经过测试,

  public class FileNameFixer { public FileNameFixer() { StringToRemove = "_"; StringReplacement = ""; } public void FixAll(string directory) { IEnumerable files = Directory.EnumerateFiles(directory); foreach (string file in files) { try { FileInfo info = new FileInfo(file); if (!info.IsReadOnly && !info.Attributes.HasFlag(FileAttributes.System)) { string destFileName = GetNewFile(file); info.MoveTo(destFileName); } } catch (Exception ex) { Debug.Write(ex.Message); } } } private string GetNewFile(string file) { string nameWithoutExtension = Path.GetFileNameWithoutExtension(file); if (nameWithoutExtension != null && nameWithoutExtension.Length > 1) { return Path.Combine(Path.GetDirectoryName(file), file.Replace(StringToRemove, StringReplacement) + Path.GetExtension(file)); } return file; } public string StringToRemove { get; set; } public string StringReplacement { get; set; } } 

你可以使用这个类,

  FileNameFixer fixer=new FileNameFixer(); fixer.StringReplacement = String.Empty; fixer.StringToRemove = "@@"; fixer.FixAll("C:\\temp"); 

您可以枚举该文件。

 using System.IO; string[] filePaths = Directory.GetFiles(@"c:\MyDir\"); 

然后,ForEach字符串[]并创建IO.File对象的新实例。

获得文件句柄后,只需调用Move方法并传入String.Replace(“abc_”,String.Empty)。

我说Move是因为IO.File中没有直接的Rename方法。

File.Move(oldFileName, newFileName);

注意扩展。

您可以使用foreach迭代以及System.IO命名空间中的File类。

它的所有方法都是免费提供的: http : //msdn.microsoft.com/en-us/library/system.io.file%28v=vs.100%29.aspx

Total Commander可以重命名多个文件 (您不需要为每个小任务自行编写工具)。

 string path = @"C:\NewFolder\"; string[] filesInDirectpry = Directory.GetFiles(path, "abc*"); forearch(string file in filesInDirectory) { FileInfo fileInfo = new FileInfo(file); fileInfo.MoveTo(path + "NewUniqueFileNamHere"); } 

您可以使用File.MoveString.Substring(index)

 var prefix = "abc_"; var rootDir = @"C:\Temp"; var fileNames = Directory.EnumerateFiles(rootDir, prefix + "*", SearchOption.AllDirectories); foreach(String path in fileNames) { var dir = Path.GetDirectoryName(path); var fileName = Path.GetFileName(path); var newPath = Path.Combine(dir, fileName.Substring(prefix.Length)); File.Move(path, newPath); } 

注意: Directory.EnumerateFiles(rootDir, prefix + "*", SearchOption.AllDirectories); 还将从根目录中搜索子文件夹。 如果不打算使用SearchOption.TopDirectoryOnly

我喜欢答案的简单性与最多的投票,但我不希望文件路径被修改,所以我稍微改变了代码…

 string searchString = "_abc_"; string replaceString = "_123_"; string searchDirectory = @"\\unc\path\with\slashes\"; int counter = 0; DirectoryInfo d = new DirectoryInfo(searchDirectory); FileInfo[] infos = d.GetFiles(); foreach(FileInfo f in infos) { if (f.Name.Contains(searchString)) { File.Move(searchDirectory+f.Name, searchDirectory+ f.Name.Replace(searchString, replaceString)); counter++; } } Debug.Print("Files renamed" + counter); 

此代码使用户可以替换文件名的一部分。 如果目录中有许多文件具有相同的部分,则很有用。

 using System; using System.IO; // ... static void Main(string[] args) { FileRenamer(@"D:\C++ Beginner's Guide", "Module", "PDF"); Console.Write("Press any key to quit . . . "); Console.ReadKey(true); } static void FileRenamer(string source, string search, string replace) { string[] files = Directory.GetFiles(source); foreach (string filepath in files) { int fileindex = filepath.LastIndexOf('\\'); string filename = filepath.Substring(fileindex); int startIndex = filename.IndexOf(search); if (startIndex == -1) continue; int endIndex = startIndex + search.Length; string newName = filename.Substring(0, startIndex); newName += replace; newName += filename.Substring(endIndex); string fileAddress = filepath.Substring(0, fileindex); fileAddress += newName; File.Move(filepath, fileAddress); } string[] subdirectories = Directory.GetDirectories(source); foreach (string subdirectory in subdirectories) FileRenamer(subdirectory, search, replace); } 

使用renamer ,这个命令可以解决问题:

 $ renamer --find "abc_" *