如题,最近发现页面同功能的不少,遂写了个批量替换的程序,今天下班前,一妹子说想用用,无奈友好性太差,烂成渣,遂今天晚上抽出了两个小时在改友好性提示,无奈 感觉还是渣, 有这方面经验的 提示信息给改改,这么多年貌似还没搞过这么麻烦的控制台程序 哈哈,明天上午就要上供了!
批量替换功能描述:批量将In文件夹下面的所有文件和文件内容中的 查找字符串 替换成目标字符串,名字也一样,替换后另存到Out文件夹下面。
适用人群:程序猿 码农神器,前提是 你的代码要有足够的规范度,例如实体名,变量名,页面明明等等。
我的In 文件夹下面的内容,搞asp.net mvc 页面的, 从实体类,视图类,业务类,页面 都有,全部替换个一遍,然后稍加修改就可以用了,这当然是建立在各种编程约定的前提下!
替换后的Out文件夹下面
不仅仅是文件名替换了,内容里面的也替换了!
上代码,各种异常没处理,因为没空,不过不影响正常使用
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace ReplaceScript
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(" 说明:本程序用于批量替换In文件夹中的文件,并且将新文件保存到Out文件夹中");
Console.WriteLine(" 要查找的字符串和替换为字符串用=号左右分开,例如将 [张三]替换为[李四]表示为输入 张三=李四 并回车");
string InPath = Environment.CurrentDirectory + @"\In";
string OutPath = Environment.CurrentDirectory + @"\Out";
bool IsReplaceDirName = false;
Console.WriteLine("步骤一:是否需要替换文件名中的字符串,例如将 北京的夜晚.txt 中北京替换成 郑州,在Out文件夹中生成 郑州的夜晚.txt,需要此功能请输入一个y(大小写均可)并回车");
Console.WriteLine(" 启用文件名替换?(Y/N)");
if (Console.ReadLine().ToLower() == "y")
IsReplaceDirName = true;
string targetKeyWord = "";
string replaceKeyWord = "";
if (IsReplaceDirName == true)
{
Console.WriteLine(" 请输入文件名字中要替换和被替换的内容用=号分割,左边为要查找的字符串,右边为要替换成的字符串例如 北京=郑州 并回车");
Console.WriteLine(" 请输入以回车完成");
var instr = Console.ReadLine();
var strArray = instr.Split('=');
if (strArray.Length < 2)
{
Console.WriteLine(" 没输入=按任意键将退出,别捣乱!");
return;
}
targetKeyWord = strArray[0];
replaceKeyWord = strArray[1];
}
List<string> fileList = new List<string>();
DirectoryInfo dir = new DirectoryInfo(InPath);
fileList = GetAll(dir);
//获得输入的内容替换 对儿
List<ReplaceKeyValue> list = GetReplaceKeyValue();
string SavePath = "";
foreach (var file in fileList)
{
SavePath = OutPath + @"\" + Path.GetFileName(file).Replace(targetKeyWord, replaceKeyWord);
ReplaceScript(list, file, SavePath);
}
Console.WriteLine(" 任务完成! 此程序正在为 林林 服务,任意键回车结束服务...");
Console.Read();
}
/// <summary>
/// 替换
/// </summary>
/// <param name="targetKeyWord"></param>
/// <param name="ReplaceKeyWord"></param>
/// <param name="filePath"></param>
public static void ReplaceScript(List<ReplaceKeyValue> list, string filePath, string SavePath)
{
if (list == null || list.Count == 0)
return;
string content = "";
using (FileStream fs = File.OpenRead(filePath))
{
System.Text.Encoding encode = GetType(fs);
content = File.ReadAllText(filePath, encode);
}
//replace all
foreach (var item in list)
{
content = content.Replace(item.targetKeyWord, item.replaceKeyWord);
}
//save file
File.WriteAllText(SavePath, content, Encoding.Default);
}
/// <summary>
/// 获得替换列表
/// </summary>
/// <returns></returns>
public static List<ReplaceKeyValue> GetReplaceKeyValue()
{
Console.WriteLine("***************这是华丽的分割线*******************");
Console.WriteLine("步骤二: 输入文件内容中要替换的查找字符串和替换字符串,以=分割,左边表示要查找的内容,右边表示要替换为的内容 以回车结束输入");
List<ReplaceKeyValue> list = new List<ReplaceKeyValue>();
string _targetKeyWord = "";
while (_targetKeyWord != "*")
{
Console.WriteLine("请输入要查找的内容和替换为的内容用=号分割 并回车,或者输入一个*并回车结束输入");
var instr = Console.ReadLine();
if (instr == "*")
break;
var strArray = instr.Split('=');
if (strArray.Length < 2)
{
Console.WriteLine("刚输入的没=号,骗子啊");
continue;
}
list.Add(new ReplaceKeyValue { targetKeyWord = strArray[0], replaceKeyWord = strArray[1] });
}
Console.WriteLine("*******下面开始批量替换了,按任意按键开始************");
Console.ReadKey();
return list;
}
/// <summary>
/// 获得当前文件夹下的所有文件及其相关信息
/// </summary>
/// <param name="dir"></param>
/// <returns></returns>
public static List<string> GetAll(DirectoryInfo dir)//搜索文件夹中的文件
{
List<string> FileList = new List<string>();
FileInfo[] allFile = dir.GetFiles();
foreach (FileInfo file in allFile)
{
FileList.Add(file.FullName);
}
DirectoryInfo[] allDir = dir.GetDirectories();
foreach (DirectoryInfo d in allDir)
{
FileList.AddRange(GetAll(d));
}
return FileList;
}
/// <summary>
/// Get Files Encoding
/// </summary>
/// <param name="fs"></param>
/// <returns></returns>
public static System.Text.Encoding GetType(FileStream fs)
{
BinaryReader r = new BinaryReader(fs, System.Text.Encoding.Default);
byte[] ss = r.ReadBytes(4);
//编码类型 Coding=编码类型.ASCII;
if (ss[0] <= 0xEF)
{
if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF)
{
return System.Text.Encoding.UTF8;
}
else
if (ss[0] == 0xFE && ss[1] == 0xFF)
{
return System.Text.Encoding.BigEndianUnicode;
}
else
if (ss[0] == 0xFF && ss[1] == 0xFE)
{
return System.Text.Encoding.Unicode;
}
else
{
return System.Text.Encoding.Default;
}
}
else
{
return System.Text.Encoding.Default;
}
}
}
/// <summary>
/// 替换的键值对
/// </summary>
public class ReplaceKeyValue
{
/// <summary>
/// 目标值
/// </summary>
public string targetKeyWord { get; set; }
/// <summary>
/// 替换值
/// </summary>
public string replaceKeyWord { get; set; }
}
}
后续:
这两天晚上抽出时间做成winform界面,果然好看好用,控制台想谈友好性 我看是痴人说梦!
移步:http://blog.csdn.net/asa_jim/article/details/47356625