一段批处理脚本(for 嵌套)
需求:
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 嵌套)的更多相关文章
- java_jdk_JDK版本切换批处理脚本
		
我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所示:
 - windows下使用批处理脚本实现多个版本的JDK切换
		
一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所 ...
 - 转】windows下使用批处理脚本实现多个版本的JDK切换
		
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/5209386.html 感谢! 一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开 ...
 - 一.JDK版本切换批处理脚本
		
我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所示:
 - JDK版本切换批处理脚本
		
我们经常在开发是遇到jdk版本切换的问题 1.手动去修改JAVA_HOME环境变量,将变量的值指向对应的JDK版本的安装目录即可. 2.通过编写批处理脚本来根据选择的JDK版本动态修改JAVA_HOM ...
 - 【转】BAT 批处理脚本 教程
		
第一章 批处理基础第一节 常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以在 ...
 - BAT 批处理脚本 教程
		
第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...
 - 【转载】BAT 批处理脚本教程
		
来源:http://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html BAT 批处理脚本 教程 第一章 批处理基础第一节 常用批处 ...
 - [转]BAT 批处理脚本 教程
		
第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...
 
随机推荐
- 巧用 BootStrap --- 栅格系统(布局)轻松搞定网页响应式布局!
			
摘要:Bootstrap 为我们提供了一套响应式.移动设备优先的流式栅格系统,合理的使用栅格系统将会使得网站页面布局变得更加简单,在设置了媒体查询之后,响应式网站也无需再单独写了.接下来我以Boots ...
 - mysql不能插入中文数据
			
上次遇到的是向mysql插入中文数据,中文数据乱码了.这次直接就不能插入中文数据了!!!! 参考博文:http://blog.csdn.net/generalyy0/article/details/7 ...
 - linux(4) vi编辑/删除、复制、粘贴  /bash  shell 环境变量设置/数据流重定向 | 的用法
			
一.vi文字处理器1.vi与vimvi:文字处理器vim:程序开发工具2.vi介绍三种模式:一般模式(vi刚进入的,不可编辑),编辑模式(按i后,左下方是insert)和命令行模式(按esc退出,:w ...
 - Javascript-正则表达式-开发中的使用.
			
-- "(-1~99)之间 -1表示无限次!" pattern="^((-1)|([0-9]{0,2}))$" -- "(0~99.99)之间 的金额 ...
 - RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用
			
Clear Text关键字用来清除输入框的数据,该关键字接收一个参数[ locator ],这里的locator指的就是界面元素的定位方式. 示例1:Clear Text清除输入框数据时,采用reso ...
 - JVM菜鸟进阶高手之路十二(jdk9、JVM方面变化, 蹭热度)
			
转载请注明原创出处,谢谢! 经过 4 次跳票,历经曲折的 Java 9 正式版终于发布了!今天看着到处都是jdk9发布了,新特性说明,心想这么好的蹭热度计划能错过嘛,哈哈,所以就发了这篇文章. 目前j ...
 - node.js express mvc轻量级框架实践
			
本文记录的是笔者最近抽私下时间给朋友做的一个时时彩自动下注系统,比较简单,主要也是为了学习一下node.js. 其实逻辑没什么可以深谈的,主要是想说说这套代码结构.结构如下图: js的代码比较难以维护 ...
 - 02.python基础知识_02
			
数据类型 1.整型 2.布尔值 3.字符串 4.列表 5.字典 6.集合 1.int(整型) i = 2 print(type(i)) 输出:<class 'int'> 2.bool(布尔 ...
 - 翻译连载 | 第 10 章:异步的函数式(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
			
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
 - Ubuntu16.04 Using Note
			
I meet lots of problems when i installed and use ubuntu 16.04.below is my using note: (my operating ...