为了做一个自动备份文件的功能,本来采用直接拷贝文件到新的路径,但程序已aspnet身份访问远程机会没有权限,按照网上的解决办法(在config中指定特殊身份)也没有解决,于是采用批处理方法来解决。
创建批处理文件:
public static void CreateCopyBat(string src, string dest) { FileStream fs = new FileStream(HttpContext.Current.Server.MapPath("~/copyfile.bat"), FileMode.OpenOrCreate, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.Write(string.Format( @"@echo off if exist {0} ( if not exist {1} ( md {1} ) xcopy {0} {1} /s /e /y echo CreatCopyBat: copyfile {0} to {1} sussecc! time:{2} >> backupFileLog.txt ) else ( echo CreatCopyBat: {0} is not exit! time:{1} >> backupFileLog.txt )", src, dest, DateTime.Now.ToString())); sw.Close(); fs.Close(); }
执行批处理文件:
name是批处理文件的路径
public void execPRO(string name) { using (Process pro = new Process()) { pro.StartInfo.FileName = name; bool isok = pro.Start(); } }
然而重定向到txt的文件并没有出现,可是直接执行bat文件就正常。
折腾了半天才发现是场乌龙,进程执行时的默认路径并不是bat文件所在路径,所以txt文件需要写完整路径。。。
之后又遇到了2个小问题:1.路径中有空格:给路径加“”解决;2.路径中有汉字,用pause加回显发现汉字变成了乱码:未解决