Windows批处理删除大小和类型一样的文件,带注释

作为批处理教程中的一个典型例子,这段代码随处可见。但却让人比较费解,大家也是抄来抄去,毫无注解。现将基本注释如下。

假设我们的目录下有三个文件:

f1.txt(10kb),f2.txt(2kb), f3.txt(2kb)

@ECHO OFF //关闭命令显示

SETLOCAL ENABLEDELAYEDEXPANSION //设置延时扩展,因为后面的复合语句中包含set操作

for /f "tokens=*" %%a in ('dir/a-d/b/oe') do set/a c+=1&set a!c!=%%a&set b!c!=%%~za&set c!c!=%%~xa

// dir/a-d/b/oe'用于获得当前目录的所有文件,并使用反引号产生set供for调用

// c是用来计数的,初始值默认为0,for循环结束后它的值将变为3

// a!c!展开后为a1,a2,a3用于表示三个文件

//b!c!展开后为b1,b2,b3用于表示三个文件大小,%~za,是变量参照替换为大小

//c!c!展开后为c1,c2,c3用于表示三个文件大小,%~xa,是变量参照替换为文件类型

for /l %%a in (1,1,%c%) do set/a d=%%a+1&for /l %%b in (!d!,1,%c%) do if not !b%%a!.==. call :1 %%a %%b

// /l 参数获得一系列递增序列,此时的c=3,则产生的序列a为1,2,3;对应的d的值为2,3,而继续以d进行遍历则得到b的值为2(2,3),3(3)这样a,b的值对变为(1,2)(1,3)(2,3),完成所有文件的遍历比较过程。

// !b%%a!.==. 这个语句判断不知道什么意思,貌似是判断!!求高手来解答

goto :eof
:1

if !b%1!==!b%2! if !c%1!==!c%2! set b%2=&del "!a%2!"

// 分别比较文件大小和类型

goto :eof

你可能感兴趣的:(Linux/Network)