批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

C# 学习笔记 命令行复制文件和目录

本帖最后由 Gin_Q 于 2021-3-9 23:41 编辑

C# 代码:
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using Microsoft.VisualBasic.FileIO;
  5. class CopyFileExercise
  6. {
  7.     static void Main (string[] args)
  8.     {
  9.         ConmandLineEventArgs Margs = new ConmandLineEventArgs(args); // 参数实例
  10.          
  11.         ConmandLineParse clp = new ConmandLineParse(); // 解析命令行
  12.         clp.Parse(Margs);
  13.          
  14.         new CopyDirectoryOrFile(Margs).Copy(); // 复制文件
  15.     }
  16.      
  17.     // 储存参数数据
  18.     public class ConmandLineEventArgs : EventArgs
  19.     {
  20.         public readonly string sourceMatch = "-source:"; // 只读字段
  21.         public readonly string destinationMatch = "-destination:";
  22.         public string[] Args;
  23.         public string source{ get; set;} // 主要储存数据字段
  24.         public string destination{ get; set;} // 主要储存数据字段
  25.         public string Error;
  26.          
  27.         public ConmandLineEventArgs(string[] args)
  28.         {
  29.             this.Args = args;
  30.         }
  31.     }
  32.      
  33.     static void CLParseEventHandler(object sender, ConmandLineEventArgs e)
  34.     {
  35.         Console.WriteLine(e.Error);
  36.         Console.WriteLine("参数用法:\n\n\t{0}源文件名(或者源目录名)\n\t{1}新文件名(或者新目录名)", e.source, e.destination);
  37.         Environment.Exit(1); // 退出进程
  38.     }
  39.      
  40.     // 命令行解析
  41.     class ConmandLineParse
  42.     {
  43.          
  44.         public ConmandLineParse()
  45.         {
  46.             this.ErrorEvent += CLParseEventHandler; // 默认订阅事件处理器
  47.         }
  48.          
  49.         public event EventHandler<ConmandLineEventArgs> ErrorEvent; // 错误事件
  50.          
  51.         public void Parse(ConmandLineEventArgs e)
  52.         {
  53.             if (e.Args.Length != 2) // 检查参数数量
  54.             {
  55.                 e.Error = "输入参数数量错误";
  56.                 this.OnErrorEvent(e);
  57.             }
  58.             
  59.             foreach (var n in e.Args) // 分析参数
  60.             {
  61.                 if (n.StartsWith(e.sourceMatch))
  62.                 {
  63.                     e.source =  n.Replace (e.sourceMatch, ""); // 源数据
  64.                 }
  65.                 else if (n.StartsWith(e.destinationMatch))
  66.                 {
  67.                     e.destination = n.Replace (e.destinationMatch, ""); // 目标数据
  68.                 }
  69.             }
  70.             
  71.             // 检查数据是否为空
  72.             if (e.source == "")
  73.             {
  74.                 e.Error = "source为空";
  75.                 this.OnErrorEvent(e);
  76.             }
  77.             if (e.destination == "")
  78.             {
  79.                 e.Error = "destination为空";
  80.                 this.OnErrorEvent(e);
  81.             }
  82.         }
  83.          
  84.         private void OnErrorEvent(ConmandLineEventArgs e) // 参数不正确事件触发
  85.         {
  86.             this.ErrorEvent(this, e);
  87.         }
  88.     }
  89.      
  90.     // 文件或者目录复制
  91.     public class CopyDirectoryOrFile
  92.     {
  93.         private ConmandLineEventArgs e;
  94.         private event EventHandler<ConmandLineEventArgs> ErrorEvent; // 事件
  95.          
  96.         public CopyDirectoryOrFile(ConmandLineEventArgs e)
  97.         {
  98.             this.e = e;
  99.             this.ErrorEvent += CLParseEventHandler; // 事件订阅
  100.         }
  101.          
  102.          
  103.         public void Copy()
  104.         {
  105.             // 调用不同的复制方法
  106.             try
  107.             {
  108.                 if (File.Exists(this.e.source))
  109.                 {
  110.                    FileSystem.CopyFile(this.e.source, this.e.destination, UIOption.AllDialogs, UICancelOption.DoNothing); // 用户取消不引发异常
  111.                 }
  112.                 else if (Directory.Exists(this.e.source))
  113.                 {
  114.                     FileSystem.CopyDirectory(this.e.source, this.e.destination, UIOption.AllDialogs, UICancelOption.DoNothing);
  115.                 }
  116.                 else
  117.                 {
  118.                     this.e.Error = String.Format("{0} 既不是文件也不是目录", e.source);
  119.                     ErrorEvent(this, this.e);
  120.                 }
  121.             }
  122.             catch (IOException E)
  123.             {
  124.                 this.e.Error = E.Message; // 获取异常的信息
  125.                 ErrorEvent(this, this.e);
  126.             }
  127.         }
  128.     }
  129. }
复制代码
batch shell 代码:
  1. @echo off
  2. REM 例子
  3. REM CopyFile.exe -source:"D:\GIN\py" -destination:"D:\1 3"
  4. CopyFile.exe -source:"D:\GIN\py\tianqi\dataTest.txt" -destination:"D:\1.txt"
  5. REM CopyFile.exe -source:"D:\GIN\py\tianqi\dataTest.txt" -destination:"D:\1 3"
  6. REM CopyFile.exe -source:"visualbasic.rar" -destination:"D:\1 3"
  7. echo %errorlevel%
  8. pause
复制代码
效果图:


一段小代码演示:
  1. @echo off
  2. echo;
  3. echo ##############################
  4. echo ## 穿越火线和英雄联盟备份 ###
  5. echo ##############################
  6. echo;
  7. echo 输入 ^<Q^> 退出
  8. echo 输入 ^<L^> 备份英雄联盟
  9. echo 输入 ^<C^> 备份穿越火线
  10. echo 输入 ^<T^> 备份穿越火线和英雄联盟
  11. echo;
  12. echo 请输入字母不区分大小写:
  13. choice /c QLCT /n
  14. set result=%errorlevel%
  15. if %result% equ 1 exit
  16. if %result% equ 2 call :BackupLOL
  17. if %result% equ 3 call :BackupCF
  18. if %result% equ 4 call :BackupTotal
  19. pause
  20. exit 0
  21. :BackupLOL
  22.     CopyFile.exe -source:"C:\user\英雄联盟" -destination:"D:\腾讯游戏\英雄联盟"
  23.     exit /b
  24. :BackupCF
  25.     CopyFile.exe -source:"C:\user\穿越火线" -destination:"D:\腾讯游戏\穿越火线"
  26.     exit /b
  27. :BackupTotal
  28.     call :BackupLOL
  29.     call :BackupCF
  30.     exit /b
复制代码
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

QQ:1972544783

返回列表