高级批处理问题,精通的高手来看看。

用批处理实现判断文件夹大小,然后运行指定动作。有人会写吗?拜托,骗分的也要看看问题再骗。我象菜鸟吗?k4me朋友谢谢你的答案。不过,我的文件夹里还有文件夹。你的这个方法,... 用批处理实现判断文件夹大小,然后运行指定动作。

有人会写吗?
拜托,骗分的也要看看问题再骗。我象菜鸟吗?

k4me 朋友谢谢你的答案。不过,我的文件夹里还有文件夹。你的这个方法,行不通。不过这个创意真不错。
展开
 我来答
k4me
2006-07-17 · TA获得超过2995个赞
知道大有可为答主
回答量:4802
采纳率:100%
帮助的人:1720万
展开全部
01;16 2006-07-17 粗活,太多不确定因素,同时因为涉及到Sort,Find等等命令,以及命令在NT系统中与9X系统的区别,这批处理只限于大多数中文XP(NT)系统......自己看着改吧.
分别命名2目录为d1 和 d2,......

;\\\\\\\\\\\\\\\\\\\\\\\\\\\
rem 目录大小对比
rem 目录尺寸按顺序输出为两个值,以值在文件中排序,对比排序前后文件是否一致来判断是否交换了文件夹尺寸顺序,以此作为依据判断两目录大小.
rem 1,"个文件"词组不能出现在文件名中.
rem 2,目录中含有隐藏文件不能被列出并加入文件夹大小.可参考加入"attrib *.* -h -s -r -a"命令

rem---去除属性,加入到全局总量(k4me原创)
rem attrib d1\*.* -h -s -r -a
rem attrib d2\*.* -h -s -r -a

rem---将目录属性导出(k4me原创)
dir d1 /-c>dir.txt
dir d2 /-c>>dir.txt

rem---将目录尺寸信息导出(k4me原创)
find dir.txt "个文件" >byte1.txt

rem---净化目录尺寸信息行(k4me原创)
del byte2.txt /q
for /f "tokens=3 delims= " %%i in (byte1.txt) do @echo %%i>>byte2.txt

rem---排序信息行生成新文件.(k4me原创)
sort "byte2.txt" /r>byte3.txt

rem---对比两文件,看排序前后是否一致.......(k4me原创)
fc "byte2.txt" "byte3.txt" |find "找不到相异处"||@echo "第一个文件夹大">fbig.txt|notepad fbig.txt&goto end

:sbig
@echo "第二个文件夹大">sbig.txt|notepad sbig.txt

:end
;\\\\\\\\\\\\\\\\\\\\\\\\\\\

==============================以下为新补充内容18;22 2006-07-17
16;45 2006-07-17重大修改,[sort]失败,它是以左至右字符对比为基础,汗自己1g.(也就是说1111要小于2),17;18 2006-07-17已经改为if判断.Bug未除
16;09 2006-07-17,V3版本,完成V2提到的子目录文件属性更改.见 BBB----XXX部分.因为涉及目录操作,绝对路径中不可以有空格(比如常规桌面路径就不可以)(也可再麻烦些绕路排除此问题)
16;07 2006-07-17,V2版本,支持包含子目录.在原基础上增改了AAA---ZZZ部分内容.去除子目录文件属性可参考以下链接的技术实现. [http://zhidao.baidu.com/question/4114125.html]
01;16 2006-07-17 粗活,太多不确定因素,同时因为涉及到Sort,Find等等命令,以及命令在NT系统中与9X系统的区别,这批处理只限于大多数中文XP(NT)系统......自己看着改吧.
分别命名2目录为d1 和 d2,......

;\\\\\\\\\\\\\\\\\\\\\\\\\\\
rem 目录大小对比
rem 目录尺寸按顺序输出为两个值,以值在文件中排序,对比排序前后文件是否一致来判断是否交换了文件夹尺寸顺序,以此作为依据判断两目录大小.(17;18 2006-07-17已经改为If判断)
rem 1,"个文件"词组不能出现在文件名中.
rem 2,目录中含有隐藏文件不能被列出并加入文件夹大小.可参考加入"attrib *.* -h -s -r -a"命令

rem---去除属性,加入到全局总量(k4me原创)
rem attrib d1\*.* -h -s -r -a
rem attrib d2\*.* -h -s -r -a

;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
attrib d1\*.* -h -s -r -a
dir d1 /s/b/ad/x >k4me_del.lst
for /f %%i in (k4me_del.lst) do attrib %%i\*.* -h -s -r -a

attrib d2\*.* -h -s -r -a
dir d2 /s/b/ad/x >k4me_del.lst
for /f %%i in (k4me_del.lst) do attrib %%i\*.* -h -s -r -a
;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
rem---将目录属性导出(k4me原创)
dir d1 /s /-c>dir1.txt
dir d2 /s /-c>dir2.txt

rem---确定特征字串出现行数.(等待作为废弃行结束标志跳跃取值)
find /n dir1.txt "所列文件总数:">canshu1.txt
find /n dir2.txt "所列文件总数:">canshu2.txt
for /f "skip=2 tokens=1 delims=[] " %%i in (canshu1.txt) do @echo %%i>canshu1.txt
for /f "skip=2 tokens=1 delims=[] " %%i in (canshu2.txt) do @echo %%i>canshu2.txt

rem---分别取复杂目录内总量信息.(k4me原创)
del dir11.txt /q
echo for /f "skip=%%1 tokens=* delims= " %%%%i in (dir1.txt) do @echo %%%%i ^>^>dir11.txt >me11.bat
for /f %%i in (canshu1.txt) do call me11.bat %%i
find dir11.txt "个文件" >dir111.txt
for /f "tokens=3 delims= " %%i in (dir111.txt) do @echo %%i>dir1111.txt

del dir22.txt /q
echo for /f "skip=%%1 tokens=* delims= " %%%%i in (dir2.txt) do @echo %%%%i ^>^>dir22.txt >me22.bat
for /f %%i in (canshu2.txt) do call me22.bat %%i
find dir22.txt "个文件" >dir222.txt
for /f "tokens=3 delims= " %%i in (dir222.txt) do @echo %%i>dir2222.txt

rem---对比两目录尺寸数值(k4me原创)
for /f %%i in (dir1111.txt) do for /f %%j in (dir2222.txt) do if %%i gtr %%j goto fbig
for /f %%i in (dir1111.txt) do for /f %%j in (dir2222.txt) do if %%i lss %%j goto sbig
goto same

rem---最终输出或改为其他(k4me原创)
:fbig
@echo "第一个文件夹大">msg.txt|notepad msg.txt
goto end

:sbig
@echo "第二个文件夹大">msg.txt|notepad msg.txt
goto end

:same
@echo "两个文件夹一样大">msg.txt|notepad msg.txt
goto end

:end
;\\\\\\\\\\\\\\\\\\\\\\\\\\\

参考资料: http://k4me.myrice.com/k4me.bat

百度网友a5b31646f
2006-07-20 · TA获得超过1205个赞
知道小有建树答主
回答量:634
采纳率:0%
帮助的人:433万
展开全部
在Windows中,我们经常要批量地来完成相同的工作,很多用户往往是上网搜索第三方软件来完成。其实在Windows中,巧妙地利用For命令就可以很轻松地完成很多批量工作。为了更好地理解我们的下一步实战,先让我们来看一下For命令的用法。For命令的具体格式如下:

For %variable IN (set) do command [command-parameters],

%variable——指定一个单一字母可替换的参数

(set)——指定一个或一组文件,可以使用通配符

command——指定对每个文件执行的命令

command-parameters——为特定命令指定参数或命令行开关

在批处理文件中使用 For 命令时,指定变量请使用“%%variable”,而不要用“ %variable”。变量名称是区分大小写的,所以“%i”不同于“%I”。由于For命令的用法和参数非常多,变化复杂,这里因篇幅原因就不再一一罗列了,用户可以在命令提示符后键入“For /?”来获得具体帮助。下面我们将直接进入实战,并结合实战讲述For命令的具体用法。

1. 给文本文件批量加上落款

在很多情况下,我们编辑处理完文档,都要给文件加上一个包括“通信地址、QQ、E-MAIL等等信息”的落款,如投往编辑部的稿件。如果只有一篇文章,直接输入倒也罢了,但假如你有很多这样的文件,该怎么办呢?难道每一篇稿件都要手工一个字一个字地输入那一成不变的落款吗?NO!完全没有必要这样费神,我们可以一次性地给所有文件添加上落款,假如我们要给放在“ABCDE”目录下的所有文本文件加上落款。那么就请先建一个名为Address.txt的文本文件,录入通信地址、QQ、E-mail等等信息,保存到E盘的根目录。

再新建一个文本文件,录入以下内容:

MD E:\TEMPabcde

for /r E:\ABCDE %%I in (*.txt) do copy %%I+E:\address.txt E:\tempABCDE\

for /r E:\tempABCDE %%I in (*.txt) do copy %%I E:\ABCDE\

echo y|del E:\TEMPabcde

echo y|rd E:\TEMPabcde

录入完毕,经检查确认无误后,另存为“给文件加落款.bat”,也保存到E盘的根目录。现在,只需双击此批处理文件,就可以为E:\ABCDE文件夹中所有的TXT文件加上落款。

提示:For命令指定参数“%I”从“E:\ABCDE”文件夹中的所有文本文件中取值 ;“/r”参数表示包括子目录。

2. 批量获取文件列表

如果我们需要制作某个目录下的文件清单,如电影文件的文件清单,可以用For命令来轻松完成。我们以制作F盘上的所有RM格式的电影文件的清单为例:

先在F盘根目录下建一个名为“列文件清单.bat”的文本文件,然后输入以下内容并保存:

For /r F:\ %%i in (*.rm) DO @echo %%~fi >>F:\RMList.txt

双击此批处理文件,即可快速列出F盘上所有的以RM为扩展名的电影文件的清单。

提示:For命令指定参数“%i”从F盘的所有以RM为扩展名的文件中取值;“@echo %%�fi”表示将所有的RM文件及其完整路径显示出来;“>>F�\RMList.txt”表示将输出结果重定向到F�\RMList.txt文件中,打开该文件,即可看到详细的目录清单;“�f”表示完整路径。还可以使用“%�n”(文件名)、“%�x”(文件扩展名)、“%�d”(驱动器)、“%�p”(路径)、“%�s”(完整路径)、“%�t”(文件日期)、“%�z”(文件大小)等参数。

3. 快速删除磁盘上的空文件夹

假设我们要清理D盘上的空文件夹,那么请先用记事本建一个名为“kill.bat”的文件,在该文件中输入以下内容:

dir d:\ /ad /b /s |sort /r >>d:\kill.txt

For /f %%i in (d:\kill.txt) DO rd %%i

echo y |del d:\kill.txt

先查找并删除全部“Thumbs.db”文件,然后双击该文件,D盘上所有的空文件夹很快就消失的无影无踪了。

提示:“dir d:\”表示列D盘上的所有目录包括子目录列表,其中参数“/ad”表示列所有目录;参数“/b”表示只列出文件夹名称而不显示标题信息或摘要:参数“/s”表示搜索,即查找D盘中的所有文件夹和子文件夹;“|”是管道符号,将Dir命令的结果传递给“sort”命令;“sort”命令表示排序;“/r”表示逆序列排序。之所以要逆序列排序,是因为通过逆序列排序后,D盘上的所有子文件夹总是会位于其父文件夹的前面,这样在用For命令删除空文件夹时,空的子文件夹被首先删除了,因此空的父文件夹就可以删除了。否则,因空的父文件夹中尚有空的子文件夹,会造成无法删除的情况。“>>d:\kill.txt”的作用是让屏幕回显重新定位到“d:\kill.txt”文件中。

For 命令中参数“/f”的作用是让For命令从指定的文件中读取数据作为变量,示例是从Dir的结果文件“d:\kill.txt”文件中读取数据,每次读取一行传递给RD命令;RD命令的作用是删除由For命令传递过来的每一个文件夹,因RD命令无法删除尚有内容的文件夹,所以经过For命令的循环后,只是删除了所有的空文件夹,有内容的文件夹会完好无损地被保留下来。

4. 批量获取局域网中所有IP地址与主机名的对应关系

如果你是网管,肯定需要获取一张本网段内所有IP地址与主机名的对照表。如果你不想使用第三方软件的话,不妨用For命令试试。

在命令提示符窗口中输入以下命令:

For /L %i in (0,1,254) DO ping -a -n 1 192.168..0.%i |Find /i "reply" >>E:\IPAddress.txt

好了,等命令执行完毕,打开“E:\IPAddress.txt”文件,一张完整的IP与主机名的对照表已经初步形成了,你只需作简单的编辑修改即可打印输出了。

提示:For命令指定参数“%i”从0开始,每次增加1,直到254为止,即一个C类网段的全部地址。如果用户的局域网自行定义的了IP地址,应根据实际情况设置,如可以为“172.16.0”;“-a”表示获取主机名;“-n -1”表示回显的次数为1次,默认情况下为4次;Find /i "reply“表示查找已响应的主机,即已ping通的主机;“E:\IPAddress.txt”表示将屏幕回显内容输入到“:\IPAddress.txt”文件中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
喻阳德cu
2006-07-16 · 超过23用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:0
展开全部
在Windows中,我们经常要批量地来完成相同的工作,很多用户往往是上网搜索第三方软件来完成。其实在Windows中,巧妙地利用For命令就可以很轻松地完成很多批量工作。为了更好地理解我们的下一步实战,先让我们来看一下For命令的用法。For命令的具体格式如下:

For %variable IN (set) do command [command-parameters],

%variable——指定一个单一字母可替换的参数

(set)——指定一个或一组文件,可以使用通配符

command——指定对每个文件执行的命令

command-parameters——为特定命令指定参数或命令行开关

在批处理文件中使用 For 命令时,指定变量请使用“%%variable”,而不要用“ %variable”。变量名称是区分大小写的,所以“%i”不同于“%I”。由于For命令的用法和参数非常多,变化复杂,这里因篇幅原因就不再一一罗列了,用户可以在命令提示符后键入“For /?”来获得具体帮助。下面我们将直接进入实战,并结合实战讲述For命令的具体用法。

1. 给文本文件批量加上落款

在很多情况下,我们编辑处理完文档,都要给文件加上一个包括“通信地址、QQ、E-MAIL等等信息”的落款,如投往编辑部的稿件。如果只有一篇文章,直接输入倒也罢了,但假如你有很多这样的文件,该怎么办呢?难道每一篇稿件都要手工一个字一个字地输入那一成不变的落款吗?NO!完全没有必要这样费神,我们可以一次性地给所有文件添加上落款,假如我们要给放在“ABCDE”目录下的所有文本文件加上落款。那么就请先建一个名为Address.txt的文本文件,录入通信地址、QQ、E-mail等等信息,保存到E盘的根目录。

再新建一个文本文件,录入以下内容:

MD E:\TEMPabcde

for /r E:\ABCDE %%I in (*.txt) do copy %%I+E:\address.txt E:\tempABCDE\

for /r E:\tempABCDE %%I in (*.txt) do copy %%I E:\ABCDE\

echo y|del E:\TEMPabcde

echo y|rd E:\TEMPabcde

录入完毕,经检查确认无误后,另存为“给文件加落款.bat”,也保存到E盘的根目录。现在,只需双击此批处理文件,就可以为E:\ABCDE文件夹中所有的TXT文件加上落款。

提示:For命令指定参数“%I”从“E:\ABCDE”文件夹中的所有文本文件中取值 ;“/r”参数表示包括子目录。

2. 批量获取文件列表

如果我们需要制作某个目录下的文件清单,如电影文件的文件清单,可以用For命令来轻松完成。我们以制作F盘上的所有RM格式的电影文件的清单为例:

先在F盘根目录下建一个名为“列文件清单.bat”的文本文件,然后输入以下内容并保存:

For /r F:\ %%i in (*.rm) DO @echo %%~fi >>F:\RMList.txt

双击此批处理文件,即可快速列出F盘上所有的以RM为扩展名的电影文件的清单。

提示:For命令指定参数“%i”从F盘的所有以RM为扩展名的文件中取值;“@echo %%�fi”表示将所有的RM文件及其完整路径显示出来;“>>F�\RMList.txt”表示将输出结果重定向到F�\RMList.txt文件中,打开该文件,即可看到详细的目录清单;“�f”表示完整路径。还可以使用“%�n”(文件名)、“%�x”(文件扩展名)、“%�d”(驱动器)、“%�p”(路径)、“%�s”(完整路径)、“%�t”(文件日期)、“%�z”(文件大小)等参数。

3. 快速删除磁盘上的空文件夹

假设我们要清理D盘上的空文件夹,那么请先用记事本建一个名为“kill.bat”的文件,在该文件中输入以下内容:

dir d:\ /ad /b /s |sort /r >>d:\kill.txt

For /f %%i in (d:\kill.txt) DO rd %%i

echo y |del d:\kill.txt

先查找并删除全部“Thumbs.db”文件,然后双击该文件,D盘上所有的空文件夹很快就消失的无影无踪了。

提示:“dir d:\”表示列D盘上的所有目录包括子目录列表,其中参数“/ad”表示列所有目录;参数“/b”表示只列出文件夹名称而不显示标题信息或摘要:参数“/s”表示搜索,即查找D盘中的所有文件夹和子文件夹;“|”是管道符号,将Dir命令的结果传递给“sort”命令;“sort”命令表示排序;“/r”表示逆序列排序。之所以要逆序列排序,是因为通过逆序列排序后,D盘上的所有子文件夹总是会位于其父文件夹的前面,这样在用For命令删除空文件夹时,空的子文件夹被首先删除了,因此空的父文件夹就可以删除了。否则,因空的父文件夹中尚有空的子文件夹,会造成无法删除的情况。“>>d:\kill.txt”的作用是让屏幕回显重新定位到“d:\kill.txt”文件中。

For 命令中参数“/f”的作用是让For命令从指定的文件中读取数据作为变量,示例是从Dir的结果文件“d:\kill.txt”文件中读取数据,每次读取一行传递给RD命令;RD命令的作用是删除由For命令传递过来的每一个文件夹,因RD命令无法删除尚有内容的文件夹,所以经过For命令的循环后,只是删除了所有的空文件夹,有内容的文件夹会完好无损地被保留下来。

4. 批量获取局域网中所有IP地址与主机名的对应关系

如果你是网管,肯定需要获取一张本网段内所有IP地址与主机名的对照表。如果你不想使用第三方软件的话,不妨用For命令试试。

在命令提示符窗口中输入以下命令:

For /L %i in (0,1,254) DO ping -a -n 1 192.168..0.%i |Find /i "reply" >>E:\IPAddress.txt

好了,等命令执行完毕,打开“E:\IPAddress.txt”文件,一张完整的IP与主机名的对照表已经初步形成了,你只需作简单的编辑修改即可打印输出了。

提示:For命令指定参数“%i”从0开始,每次增加1,直到254为止,即一个C类网段的全部地址。如果用户的局域网自行定义的了IP地址,应根据实际情况设置,如可以为“172.16.0”;“-a”表示获取主机名;“-n -1”表示回显的次数为1次,默认情况下为4次;Find /i "reply“表示查找已响应的主机,即已ping通的主机;“E:\IPAddress.txt”表示将屏幕回显内容输入到“:\IPAddress.txt”文件中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
待宰鱼
2006-07-16 · TA获得超过180个赞
知道答主
回答量:195
采纳率:0%
帮助的人:0
展开全部
For命令的具体格式如下:

For %variable IN (set) do command [command-parameters],

%variable——指定一个单一字母可替换的参数

(set)——指定一个或一组文件,可以使用通配符

command——指定对每个文件执行的命令

command-parameters——为特定命令指定参数或命令行开关
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bdb5c21
2006-07-17 · 超过13用户采纳过TA的回答
知道答主
回答量:107
采纳率:0%
帮助的人:0
展开全部
没事~ 来逛下~!
太强了...高手就是高手
赞...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式