重命名文件我有超過1000個文件與文件夾的名字一樣abc_1,abc_2 ... abc_n在文件夾C#
我想刪除所有文件這個前綴「abc_」。任何不做這個手冊的機會,因爲他們超過1000,並且會很痛苦。
如何用c#做到這一點?
重命名文件我有超過1000個文件與文件夾的名字一樣abc_1,abc_2 ... abc_n在文件夾C#
我想刪除所有文件這個前綴「abc_」。任何不做這個手冊的機會,因爲他們超過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_",""));
}
哦,我遲到了10秒。 +1 DirectoryInfo和FileInfo @Candie, – DoomerDGR8
,謝謝。這工作完美。 –
我很樂意幫助你Jason,thak'你 –
您可以使用foreach迭代以及System.IO命名空間中的File類。提供
其所有的方法你在這裏沒有成本:http://msdn.microsoft.com/en-us/library/system.io.file%28v=vs.100%29.aspx
您可以枚舉文件試試。
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);
要留意的擴展。
您可以使用File.Move
和String.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
。
你應該看看DirectoryInfo類和GetFiles()方法。並看看提供Move()方法的File類。
File.Move(oldFileName, newFileName);
string path = @"C:\NewFolder\";
string[] filesInDirectpry = Directory.GetFiles(path, "abc*");
forearch(string file in filesInDirectory)
{
FileInfo fileInfo = new FileInfo(file);
fileInfo.MoveTo(path + "NewUniqueFileNamHere");
}
下面的代碼工作,而不是雖然測試,
public class FileNameFixer
{
public FileNameFixer()
{
StringToRemove = "_";
StringReplacement = "";
}
public void FixAll(string directory)
{
IEnumerable<string> 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");
其工作正常:)我已經測試和使用它。 – Sublime
這個命令會做的伎倆,利用rename:
$ rename --find "abc_" *
我喜歡簡單的答案與最多票,但我不希望文件路徑得到修改,所以我稍微改變了代碼...
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);
}
也許一個很好的候選人PowerShell腳本 –
看看這個http://stackoverflow.com/questions/2023975/renaming-a-directory-in-c-sharp –
你只是想刪除前綴? – aliboy38