需求:

1、服务器上有一堆按日期生成的目录,已经有N个月了,需要只取当前月份的目录。

2、目录中有一系列文件,文件名字不一样,但存在一定的重复规律。

3、需要从服务器上拷贝文件到本地,自动去重,拷贝到本地。

具体如下:

R:\>dir
驱动器 R 中的卷是 新加卷
卷的序列号是 3E8F-427A R:\ 的目录 2017-10-27 08:46 <DIR> .
2017-10-27 08:46 <DIR> ..
2017-07-24 11:52 <DIR> 20170515
2017-06-07 08:35 <DIR> 20170523
2017-07-27 09:42 <DIR> 20170526
2017-09-20 10:52 <DIR> 20170531
2017-07-24 09:04 <DIR> 20170601
2017-07-24 09:04 <DIR> 20170602
2017-07-27 09:42 <DIR> 20170605
2017-09-06 10:06 <DIR> 20170606
2017-07-27 09:42 <DIR> 20170607
2017-08-01 17:32 <DIR> 20170608
2017-07-27 09:42 <DIR> 20170609
2017-07-27 09:42 <DIR> 20170612
2017-08-31 13:23 <DIR> 20170613
2017-07-24 10:29 <DIR> 20170614
2017-08-04 10:15 <DIR> 20170615
2017-07-27 09:42 <DIR> 20170616
2017-08-04 11:10 <DIR> 20170618
2017-07-27 09:42 <DIR> 20170619
... R:\>dir 20170619\INV*.jpg
 驱动器 R 中的卷是 新加卷
 卷的序列号是 3E8F-427A  R:\20170619 的目录 2017-06-19  11:07           159,232 INV__18_5000005628_104616884_730902_001_145453.jpg
2017-06-19  11:07           159,232 INV__18_5000005628_104616884_730903_001_145451.jpg
2017-06-19  13:55           313,689 INV_00160210_1_2052273001_000390931_689609_001_135633.jpg
2017-06-19  14:22           295,899 INV_00280566_1_2033012003_104611169_724697_001_144845.jpg
2017-06-19  14:22           302,428 INV_00280635_1_2033012003_104618040_729760_001_144831.jpg
2017-06-19  14:22           300,046 INV_00280779_1_2033012003_3160060115_730413_001_144815.jpg
2017-06-19  14:22           293,478 INV_00280780_1_2033012003_104608132_721592_001_144722.jpg
2017-06-19  11:06           154,666 INV_00465220_18_0000143436_104602580_730772_001_145518.jpg
2017-06-19  14:22           307,641 INV_00470110_1_2251011001_3170241511_730220_001_145329.jpg
2017-06-19  14:22           302,693 INV_00470111_1_2251011001_3170241521_729798_001_145315.jpg
2017-06-19  14:22           309,057 INV_00470113_1_2251011001_104620685_730084_001_145344.jpg
2017-06-19  14:22           303,410 INV_00470148_1_2251011001_3070121522_729778_001_145301.jpg
2017-06-19  14:22           303,410 INV_00470148_1_2251011001_3070121522_730221_001_145301.jpg
2017-06-19  14:22           301,973 INV_00470167_1_2251011001_3090041511_714462_001_145039.jpg
2017-06-19  14:22           304,724 INV_00470175_1_2251011001_4110141911_730103_001_145242.jpg
2017-06-19  14:18           326,760 INV_00479189_1_2011012030_104607136_729135_001_142610.jpg
2017-06-19  14:18           326,615 INV_00535438_1_5000001381_3192094314_716531_001_142416.jpg
2017-06-19  14:18           325,687 INV_00542079_1_2211012050_104617955_729006_001_142444.jpg ...

可以看到,按日期生成了目录。以目录下的文件举例,前两个文件其实大小都一样,是重复的。判断规则就是红色部分重名。

查找百度并反复测试,最后实现脚本如下:


 @echo off&setlocal enabledelayedexpansion
for /d %%s in (r:\201710*) do (
rem echo s1%%s\inv*.jpg
for /f "delims==" %%i in ('dir %%s\inv*.jpg /b') do (
rem echo i1%%i
for /f "tokens=3 delims=_ " %%j in ("%%i") do (
if exist D:\invall\%%j.jpg (
echo "pass copy file "%%s\%%i
) else (
echo "copy file "%%s\%%i
copy %%s\%%i D:\invall\%%j.jpg >nul
rem pause
)
)
)
)
goto :end
:end
pause

总结:

1、for循环中,变量只能1个字母,%%s是ok的,%%subdir不ok。

2、for /f "delims==" %%i in ('dir %%s\inv*.jpg /b') %%i 前不能有变量。

3、do  () ,do后面必须有一个空格。
4、setlocal enabledelayedexpansion 加扩展延迟。

另一种写法:

 @echo off
setlocal enabledelayedexpansion
for /d %%i in (r:\201710*) do (
call :subdir %%i
) :subdir
echo subdir %1%
for /r "%1" %%b in (inv*.jpg) do (
echo %%b
call :substr %%b
)
:substr
for /f "tokens=3 delims=_" %%j in ("%1%") do (
echo substrfor %%j
copy %1 D:\invall\%%j.jpg
)
goto :eof
:eof
pause

以上……

一段批处理脚本(for 嵌套)的更多相关文章

  1. java_jdk_JDK版本切换批处理脚本

    我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所示:

  2. windows下使用批处理脚本实现多个版本的JDK切换

    一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所 ...

  3. 转】windows下使用批处理脚本实现多个版本的JDK切换

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/5209386.html 感谢! 一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开 ...

  4. 一.JDK版本切换批处理脚本

    我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所示:

  5. JDK版本切换批处理脚本

    我们经常在开发是遇到jdk版本切换的问题 1.手动去修改JAVA_HOME环境变量,将变量的值指向对应的JDK版本的安装目录即可. 2.通过编写批处理脚本来根据选择的JDK版本动态修改JAVA_HOM ...

  6. 【转】BAT 批处理脚本 教程

    第一章 批处理基础第一节 常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以在 ...

  7. BAT 批处理脚本 教程

    第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...

  8. 【转载】BAT 批处理脚本教程

    来源:http://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html BAT 批处理脚本 教程   第一章 批处理基础第一节 常用批处 ...

  9. [转]BAT 批处理脚本 教程

    第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...

随机推荐

  1. Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】

    前言 上篇Struts博文已经讲解了Struts的开发步骤以及执行流程了-..对Struts的配置文件有了了解-..本博文继续讲解Struts在配置的时候一些值得要学习的细节- Action开发的三种 ...

  2. 随便讲讲我对于svn和git的想法

    1.SVN是集中式版本管理工具,而Git是分布式版本管理工具,这是核心区别. 二者都有集中的库,只是git偏向于分布式,用户可以再自己电脑上克隆一份自己的库,即使在断网的情况下也能够查看版本,创建分支 ...

  3. vue+element搭建的后台管理系统

    最近工作不是很忙,自己在学习vue,在网上找了一个简单的项目练练手..... 这是本人的gitHub 上的项目地址:https://github.com/shixiaoyanyan/vue-admin ...

  4. 使用cocos2d脚本生成lua绑定

    这几天要老大要求把DragonBones移到cocos2dx 3.0 里边,并且绑定lua使用接口.因为刚学lua,使用的引擎也刚从2.2改为3.0,各种不熟悉,折腾了好几天才弄完,有空了总结一下 这 ...

  5. android动画的实现过程

    先上自己的测试代码,有参考apidemo中的AnimationDrawable中的方法 public class AnimateActivity extends Activity { @Overrid ...

  6. OpenStack Ocata 超详细搭建文档

    前言 搭建前必须看我本文档搭建的是分布式O版openstack(controller+ N compute + 1 cinder)的文档.openstack版本为Ocata.搭建的时候,请严格按照文档 ...

  7. [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)

    上文,写完弧度与贝塞尔曲线[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具),本文主要是关于线条的样式设置 lineWidth: 设置线条的宽 ...

  8. 第一次安装jshint,jshint新手使用记录

    刚刚出来工作的渣渣,第一次进入这样比较正规的公司,各个开发流程都比较严格,代码也是要经过jshint的检测才能上传到svn才能成功打包项目.所以我这种技术都半桶水的职场开发小白,也是第一次用jshin ...

  9. jquery模板下载网站

    jquery模板下载网站 http://www.jqshare.com/

  10. php使用PHPMailer邮件类发送邮件

    PHPMailer是一个用于发送电子邮件的PHP函数包.它提供的功能包括:*.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址*.支持多种邮件编码包括:8bit,base64,binary和qu ...