写⼀个简单的批处理(bat)
看了看以前写的总结,发现有这样的⼀个批处理,还是挺有意思。拿出来分享⼀下。
1、 for /d %%i in (*) do (
2、 rem set _day=%%~ti
3、 cd %%i
4、 for %%j in (*) do (
5、 @echo j: %%j
6、 set file1=%~dp0%%i\%%j
7、 @echo xxx: %~dp0%%i\%%j
8、 set file2=C:\text\%%i\%%j
9、 @echo yyy: C:\text\%%i\%%j
10、 echo file1 : %file1%
11、 echo file2 : %file2%
12、 rem set t1=%%~tj
13、 rem set t2=C:\text\%%i\%%~tj rem 当前⽬录名
批处理文件怎么做14、 rem echo t1:!t1!
15、 rem echo t2:!t2!
16、 call :deal "%~dp0%%i\%%j" "C:\text\%%i\%%j" & rem调⽤时间对⽐
17、 )
18、 cd ../
19、 echo i: %%i
20、 echo t: %%~ti
21、 )
22、 :deal
23、 rem if "%~t1"=="%~t2" (echo same)else echo different
24、 if "%~t1" gtr "%~t2" (
25、 pause
26、 echo copy
27、 copy %1 %2
28、 )
下⾯是分析:
第⼀⾏:⼀个for循环,“/d”是只遍历⽬录,“%%i”是给“i”赋值,也就是循环的赋予“i”不同的⽂件夹的名称,“in(*)”是代表默认是当前⽂件夹⾥⾯所有⼦⽂件夹,do(…)⾥⾯是要进⾏的处理,这⾥要注意格式。
第⼆⾏:“望⽂⽣义”就是要进⼊到⼦⽂件夹⾥⾯了。
第三⾏:这⾥嵌套了⼀个for循环,什么意思??哈哈,看看第⼀⾏的解释吧。
第四⾏:打印j的值,也就是⼦⽂件夹⾥⾯的⽂件名,“echo”前⾯多了⼀个“@”表⽰以下指令不需要在dos窗⼝显⽰了。
第五⾏:设置⼀个变量,并给它赋值,“%~dp0”是当前⽂件路径,拿file1的值知道了吗,其实就是路径+⽂件名。
第六⾏:打印。
第七⾏:估计第五⾏表⽰什么你懂了,那咋们就继续往下吧。
第九⾏:
第⼗⾏:
第⼗⼀⾏:
第⼗⼆到⼗五⾏:是注释语句,“rem”当时是调试⽤的。
第⼗六⾏:进⾏了⼀个调⽤:“call”,其调⽤的是标⽰符为“:deal”下⾯的内容,传递进了两个参
数:"%~dp0%%i\%%j"跟"C:\text\%%i\%%j",其实也就是路劲+⽂件名,这样⼀说,明了了吧,两个要⽐较的⽂件呢。
第⼆⼗四⾏:那我们就顺便看看“:deal”⾥⾯是什么东东吧。⼀个“if”,条件判断语句:如果“%~t1”⼤于“%~t2”就执⾏括号⾥⾯的内容。“gtr”是⽐较符,⼤于的意思,更多⽐较符的解释可以查看相关资料。⽽“%~t1”跟“%~t2”呢,根据我们上⾯陈述的程序的功能,⽆疑就是两个⽂件的修改时间了。这⾥需要解释⼀下,"%1"跟"%2"分别代表“call”语句中传递进来的两个参数,⽽"%~t1"跟"%~t2"呢,就是获取两个参数的修改时间了。括号⾥⾯值得⼀提的是“pause”语句,意思是“阻断⼀下”,运⾏⽂件是在dos窗⼝下看到的是“请按任意键继续”。说到这⾥,括号⾥⾯的剩下内容应该看懂了吧。
第⼗⼋⾏:回来for循环中,这⾏的意思跟linux下是⼀样的:跳到上⼀层⽬录下。后⾯两⾏的意思就不要解释了,当时也是调试⽤的。执⾏完这两条语句,我们就重新给“%%i”赋值,这样就可以达到了遍历的⽬的了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论