通过任务管理备份文件的EXE实现_第1页
通过任务管理备份文件的EXE实现_第2页
通过任务管理备份文件的EXE实现_第3页
通过任务管理备份文件的EXE实现_第4页
通过任务管理备份文件的EXE实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、 设置:对应设置文件XXX. exe.config二、 任务调用:“添加参数”的说明:目录路径 :需要处理(检查是否存在、删除它们、移转它们)的目录路径文件名(或JSON表达式):如果不是一个文件,而是多个文件就需要用到JSON表达式需望它存在下去:Y表示只做检查,它将检查存在和文件不为0,否则视为异常是否删除它:当前一个参数为N时,本参数Y表示要删除是否移转它:当前一个参数为N时,本参数Y表示要移转移转路径:当前一个参数为N时,本参数表示要移转的目标目录检查backhostbackup 下所有今天的TEST_*.rar的文件是否存在示例:backhostbackup "TEST

2、_%'FORMAT':'yyyyMMdd','SUB':'DD','ADJ':0%*.rar" Y删除backhostbackup 下所有今天的TEST_*.rar的文件示例:backhostbackup "TEST_%'FORMAT':'yyyyMMdd','SUB':'DD','ADJ':0%*.rar" N Y移转backhostbackup 下所有今天的TEST_*.rar的文件到D:示例:back

3、hostbackup "TEST_%'FORMAT':'yyyyMMdd','SUB':'DD','ADJ':0%*.rar" N N Y D:JSON表达式说明:要用多组表达式时请用,FORAMT:yyyyMMdd:备份文件里的日期格式,支持标准的C#日期时间格式,如yyyy、yyyyMM、yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd,还可以yyyyMM01表于当月1号,yyyyMM31表示当月最后一天SUB:DD:日期格式中的哪一部分需要特别调整,YYYY、MM、DD、HH、

4、MI都可以ADJ:0:对上一日期格式中的特殊部分进行调整,如0、-2、+10三、 脚本通过Visual Studio来实现C# .NET控制台应用程序:using Newtonsoft.Json;/ Newtonsoft需另外加入包,可由NuGet来搜索Json.NET加入进来using Newtonsoft.Json.Linq;using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using Syste

5、m.Threading.Tasks;namespace backup_check class Program/以下灰色部分是发短信的参数,由“设置”参数里取值出来 static string sLogPath = Properties.Settings.Default.LogPath; static string smsUser = Properties.Settings.Default.SmsUser; static string smsPwd = Properties.Settings.Default.SmsPwd; static string smsPhone = Properties.

6、Settings.Default.SmsPhone; static int smsNum = Properties.Settings.Default.SmsNum; static void Main(string args) string sPath = "" /目录路径 string sFile = "" /文件名(或JSON表达式) bool bExist = false; /需望它存在下去? bool bDelete = false; /是否删除它(们)? bool bMove = false; /是否移转它(们)? string sMovePat

7、h = "" /移转路径 ArrayList alSearch = new ArrayList(); /文件搜索路径 ArrayList alFiles = new ArrayList(); /搜索到的文件列表 Log("开始."); if (args.Length < 2) Log("传入参数不正确,应该包含:rn1.检查文件的目录路径,rn2.文件名称(可用%<JSON表达式>%)," + "rn3.可选需望它(们)存在下去?(Y需要|N不需要),rn4.可选是否删除它(们)?(Y是|N否),"

8、; + "rn5.可选是否移转它(们)?(Y是|N否),rn6.可选移转目标路径。", 1); return; sPath = args0; sFile = args1; if (args.Length > 2) if (args2.Contains("Y") bExist = true; else if (args.Length > 3 && args3.Contains("Y") bDelete = true; else if (args.Length > 4 && args4.C

9、ontains("Y") bMove = true; if (args.Length > 5) sMovePath = args5; else sMovePath = Environment.CurrentDirectory; if (bMove) Log("移转文件:" + sPath + "=>" + sFile + "<="); else if (bDelete) Log("删除文件:" + sPath + "=>" + sFile + &quo

10、t;<="); else if (bExist) Log("检查文件:" + sPath + "=>" + sFile + "<="); /检查目录是否存在 if (!Directory.Exists(sPath) Log("目录不存在:"+ sPath,1); return; try /处理JSON的设置要求 ArrayList alJson = json(sFile); if (alJson.Count = 0) alSearch.Add(sFile); else alSearch

11、= alJson; /按搜索路径找出所有不重复的文件路径 alFiles = searchFiles(sPath, alSearch); /需望它存在下去? if (bExist) if (alFiles.Count < 1) Log("文件不存在:"+ sFile, 3); else /检查文件大小是否正常 foreach (string file in alFiles) try if(!File.Exists(file) Log("文件不存在:" + file); FileInfo fi=new FileInfo(file); if (fi.L

12、ength = 0) Log("文件大小为0:" + file, 3); catch (Exception ex) Log("删除文件出错:" + ex.Message, 3); else if (alFiles.Count > 0) /Log(sFile + " 文件还存在!"); /是否要做删除处理 if (bDelete) deleteFiles(alFiles); else /是否要做移转处理 if (bMove) moveFiles(alFiles,sMovePath); Log("完成。"); c

13、atch (Exception ex) Log(ex.Message, 2); return; / <summary> / 解析JSON,生成搜索条件 / </summary> / <param name="filename">JSON字符串</param> / <returns>搜索条件列表</returns> private static ArrayList json(string filename) string sHead = "" string sTail = "

14、" string sJson = "" string sFormat = "" string sSub = "" string sTemp = "" string sTemp2 = "" double num = 0; int nAdj = 0; int nStart =0; int nLenght=0; int nLastDay=0; ArrayList alReturn = new ArrayList(); DateTime dtThis,dtLastDay; if (filena

15、me.Contains("%") nLenght = filename.Length; nStart = filename.IndexOf('%'); sHead = filename.Substring(0, nStart); sTail = filename.Substring(nStart + 1, nLenght - (nStart + 1); nLenght=sTail.Length; nStart = sTail.IndexOf('%'); if (nStart < 1) throw new Exception("

16、JSON参数设置错误,最少包含两个%"); sJson = sTail.Substring(0, nStart); sTail = sTail.Substring(nStart+1, nLenght - (nStart+1); if (sJson.IndexOf("") != 0) sJson = "" + sJson + "" JArray jas = (JArray)JsonConvert.DeserializeObject(sJson); foreach (var ja in jas) sFormat = ja&quo

17、t;FORMAT".ToString(); sSub = ja"SUB".ToString(); nAdj = (int)ja"ADJ" dtThis = DateTime.Now; switch (sSub.Trim().ToUpper() case "YYYY": case "Y": case "YEAR": case "YEARS": dtThis = dtThis.AddYears(nAdj); break; case "MM": cas

18、e "M": case "MONTH": case "MONTHS": dtThis = dtThis.AddMonths(nAdj); break; case "DD": case "D": case "DAY": case "DAYS": dtThis = dtThis.AddDays(nAdj); break; case "HH": case "H": case "HOUR": case &

19、quot;HOURS": dtThis = dtThis.AddHours(nAdj); break; case "MI": case "MINUTE": case "MINUTES": dtThis = dtThis.AddMinutes(nAdj); break; default: break; /处理设置日期大于月未的情况 sTemp2 = sFormat.Substring(sFormat.Length - 2, 2); if (double.TryParse(sTemp2, out num) if (num >

20、; 28) dtLastDay = LastDayOfMonth(dtThis); nLastDay = Convert.ToInt32(dtLastDay.ToString("dd"); if (num > nLastDay) num = nLastDay; sFormat = sFormat.Substring(0, sFormat.Length - 2) + Convert.ToInt32(num); sTemp = dtThis.ToString(sFormat); alReturn.Add(sHead+sTemp+sTail); return alRetur

21、n; / <summary> / 搜索文件 / </summary> / <param name="sPath">搜索的目标文件夹路径</param> / <param name="alSearch">搜索条件列表</param> / <returns>搜索结果文件列表</returns> private static ArrayList searchFiles(string sPath,ArrayList alSearch) ArrayList alRetu

22、rn = new ArrayList(); ArrayList alFiles = new ArrayList(); string searchs; string files,rmfiles; foreach (string search in alSearch) files = null; /太复杂了,只处理一个AND NOT关系的查询条件 searchs = search.Replace("AND NOT", "|").Split('|'); /如果真有AND NOT关系,那么从第2个条件开始的要去掉 for(int i=0;i<

23、;searchs.Count();i+) if (i = 0) files = System.IO.Directory.GetFiles(sPath, searchsi.Trim(), System.IO.SearchOption.AllDirectories); foreach(string file in files) alFiles.Add(file); else rmfiles = System.IO.Directory.GetFiles(sPath, searchsi.Trim(), System.IO.SearchOption.AllDirectories); foreach(st

24、ring rmfile in rmfiles) for(int j=0;j<alFiles.Count;j+) if (rmfile.Equals(alFilesj) alFiles.Remove(alFilesj); foreach (string file in alFiles) if (!alReturn.Contains(file) alReturn.Add(file); return alReturn; / <summary> / 移转文件 / </summary> / <param name="alFiles">需要移转

25、的文件列表</param> / <param name="sMovePath">移转的目标路径</param> / <returns>无</returns> private static void moveFiles(ArrayList alFiles,string sMovePath) string sNewFile; foreach (string file in alFiles) try sNewFile = sMovePath + "" + Path.GetFileName(file);

26、 if (!Directory.Exists(sMovePath) Log("移转目标文件夹不存在:" + sMovePath,3); break; if (File.Exists(sNewFile) Log("目标文件名已存在并已覆盖:" + sNewFile); File.Delete(sNewFile); File.Move(file, sNewFile); Log("移转文件到:" + sNewFile); catch (Exception ex) Log("移转文件出错:" + ex.Message, 3

27、); /throw; / <summary> / 删除文件 / </summary> / <param name="alFiles">需要删除的文件列表</param> / <returns>无</returns> private static void deleteFiles(ArrayList alFiles) foreach (string file in alFiles) try File.Delete(file); Log("删除文件:" + file); catch (E

28、xception ex) Log("删除文件出错!" + ex.Message,3); /throw; /throw new NotImplementedException(); / <summary> / 取得某月的最后一天 / </summary> / <param name="datetime">要取得月份最后一天的时间</param> / <returns>这个日期的最后一天</returns> private static DateTime LastDayOfMonth(D

29、ateTime datetime) return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1); #region 日志与发短信 / <summary> / 写日志信息 / </summary> / <param name="oMsg">要写的内容</param> / <param name="nType">日志等级:0信息,1设置异常,2运行时错误,3异常警报</param> / <returns>

30、无</returns> private static void Log(string sMsg, int nType = 0) string sFlag = "" Console.WriteLine(sMsg); try switch (nType) case 0: /正常日志 sFlag = "" break; case 1: sFlag = "【设置异常】" break; case 2: sFlag = "【运行错误】" break; case 3: /这类要发短信通知管理员 sFlag = &qu

31、ot;【警报】" if (!sendSMS(sMsg) sFlag = "【短信通知失败】" break; default: sFlag = "" break; if (!Directory.Exists(sLogPath) sLogPath = Environment.CurrentDirectory; System.IO.StreamWriter file = new System.IO.StreamWriter(sLogPath + "BACKUP_CHECK.log", true); file.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "t" + sFlag + "t" + sMsg); /file.Flush(); file.Close(); catch (Exception ex) Console.WriteLine(ex.Message.ToString(); / &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论