写一个简单的批处理(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”赋值,这样就可以达到了遍历的目的了。

你可能感兴趣的:(写一个简单的批处理(bat))