windows bat批处理复制文件操作(提取同类型文件到另一个文件夹)

同学让我帮忙处理数据,但是有365天的数据也就是365个文件夹,整体文件好几十个G,但是每个文件夹中有用的文件只有几个且很小,于是就准备写一个脚本文件对其进行批处理,反正也没学过,就搜集资料搞吧,搞好了详细写给大家看嘛。

同学的文件分布是这样的:

windows bat批处理复制文件操作(提取同类型文件到另一个文件夹)_第1张图片

其中有用的文件是这样的,且每个文件夹中都类似:

windows bat批处理复制文件操作(提取同类型文件到另一个文件夹)_第2张图片

明确了需求,直接把最后源码先看,再具体一行行讲:

@echo off
mkdir result
for /f  %%i in ('"dir /ad/b/on *.*"') do (  
echo  %%i
xcopy %%i\met_*.* result /s /e /d /y 
)
pause

下面是讲解,对应每行

(1)@为不输出当前行,echo off是取消显示命令
(2)mkdir是创建文件夹
(3)for循环中,脚本语言使用%%variable做变量,要加两个百分号,变量名大小写区分,/f的话就是遍历整体里面的内容,若不加则无法遍历file,后面的dir是当前路径,加参数(只列出当前用到的),也就是只按顺序输出文件夹名:

/A          显示具有指定属性的文件。
  attributes   D  目录                R  只读文件
               H  隐藏文件            A  准备存档的文件
               S  系统文件            -  表示“否”的前缀
 /B          使用空格式(没有标题信息或摘要)。
 /O          用分类顺序列出文件。
  sortorder    N  按名称(字母顺序)     S  按大小(从小到大)
               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
               G  组目录优先           -  颠倒顺序的前缀

(4)输出一下文件夹名
(5)将文件夹中符合met_.格式的文件复制到result文件夹中,*是通配符,可以代表任何字符。后面的参数意义为:

/s 复制非空的目录和子目录。如果省略“/s”,则“xcopy”将在单个目录中工作。
/e 复制所有子目录,包括空目录。将“/e”与“/s”和“/t”命令行选项一起使用。
/y 禁止提示确认要覆盖已存在的目标文件。
/d [:MM-DD-YYYY] 只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括“MM-DD-YYYY”值,“xcopy”会复制比现有“Destination”文件新的所有“Source”文件。该命令行选项使您可以更新更改过的文件。

 

你可能感兴趣的:(windows)