windows命令行中巧妙使用for命令

参考:http://www.it.com.cn/f/edu/047/5/7703.htm

在命令提示符后键入“For /?”来获得具体帮助,中文的,很棒!

基本格式FOR %variableIN (set)DO command [command-parameters]  ------------------->注意IN后面有空格

  %variable  指定一个单一字母可替换的参数。
  (set)      指定一个或一组文件。可以使用通配符。
  command    指定对每个文件执行的命令。
    
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable 而不要用 %variable。

命令扩展:

FOR /D %variable IN (set) DO command [command-parameters]
    如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
    检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
    如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,    则枚举该目录树。

FOR /L %variable IN (start,step,end) DO command [command-parameters]
    该集表示以增量形式从开始到结束的一个数字序列。因此,(5,-1,1)将产生序列(5 4 3 2 1)
:for /L %i in (1,1,4) do ren tmp%i.txt out%i.txt

更多用法请在命令提示符后键入“For /?”来获得具体帮助。下面我们将直接讲述For命令的具体用法。

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

  我们可以一次性地给所有文件添加上落款,假如我们要给放在“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”文件中。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

批量改名

今天的《xxxHoLic》漫画更新到了158话,我下载后,得到如下文件:(加粗为用户输入的内容)C:\>d: (输入D:以切换到D盘,否则下一个cd 命令无效)D:\>cd D:\xxxHoLic\vol14\158D:\xxxHoLic\vol14\158>dir/bXXXholic158_001.jpgXXXholic158_002-003.jpgXXXholic158_004.JPGXXXholic158_005.JPGXXXholic158_006.jpg

……(省略输出若干)

我想将它们改名为01.jpg~20.jpg用命令该怎样做呢?这里只提供一种可能的办法,实际上还有很多种方法。

D:\xxxHoLic\vol14\158>for %i  in (01,04,05,06,07,08,09) do  ren  XXXholic158_0%i.jpg%i.jpg  (for 命令中,%i变量遍历小括号中的内容)

D:\xxxHoLic\vol14\158>renXXXholic158_001.jpg01.jpg

……(命令回显会显示实际执行的命令,省略输出若干)

D:\xxxHoLic\vol14\158>renXXXholic158_009.jpg09.jpg

D:\xxxHoLic\vol14\158>for  /L  %i  in  (10,1,20)   do  ren  XXXholic158_0%i.jpg  %i.jpg

D:\xxxHoLic\vol14\158>renXXXholic158_010.jpg10.jpg

……(省略输出若干)

D:\xxxHoLic\vol14\158>ren XXXholic158_020.jpg20.jpg

D:\xxxHoLic\vol14\158>ren  XXXholic158_002-003.jpg  02-03.jpg(最后手动改名)

D:\xxxHoLic\vol14\158>

以上主要通过for...in...do 结构及/L 参数,使得本来要19次的改名操作只用两个for命令及一个ren 就搞定。for 命令详细用法请参考其帮助页。

------------------------------------------------------------------------------------------------------------------------

批量“粉碎”文件

D:\xxxHoLic\vol14\158>  for %i in (*.jpg) do copy nul %i /y

这里使用/y 来防止copy 的覆盖前提示。

------------------------------------------------------------------------------------------------------------------------

下载一系列图片:for+wget

有时我们在网上看到一系列图片,想把它们都下载下来,怎么办?首先要取得图片的地址,只有当图片的地址有一定规律性时,才能使用此法下载:在图片上点右键->“属性,然

后复制地址一栏的内容。假设要下载的图片地址很有规律,恰为http://www.example.com/下的1.jpg-100.jpg

网上有很多命令行小程序,可以增强命令行的功能。这里使用GNUGNUWget该程序可通过HTTPHTTPSFTP协议下载文件。

官方网站:http://www.gnu.org/software/wget/Windows版下载地址:http://www.christopherlewis.com/WGet/WGetFiles.htm

一般下载最新的稳定(stable)版本,解压后进入wget的安装目录,输入:

D:\soft\wget>md  E:\pic(建立目录用来存放下载的图片)

D:\soft\wget>for  /L  %i  in (1,1,100)  do wget -P E:\pichttp://www.example.com/%i.jpg

(注意,wget中的参数以“-”开头,而不是“/”,而且严格区分大小写。这是Unix风格的参数写法。)

(-P 指定文件的存放位置。wget的其他功能请参考其帮助手册页)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------


 


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值