Board logo

标题: 请问FOR语句 /的秘密````` [打印本页]

作者: doyoukissme     时间: 2006-10-24 07:22    标题: 请问FOR语句 /的秘密`````

我是个刚学DOS语言的学生```
在学习时很有兴趣```
可在学到FOR语句的时候出现了个问题`````
就是FOR /R
             /L
             /F
  这3个参数个是什么意思```是不是还有其他的参数```
我这问题``查了些资料就发现了简单的解说````希望有高手能好告诉我比较详细的解说 ````在次谢过了```:D
作者: fastslz     时间: 2006-10-24 07:35
FOR /? 就是它的全部帮助呀!但是FOR命令不容易掌握哦,灵活应用、及思路很重要。在论坛上多搜索些实例看看~
作者: doyoukissme     时间: 2006-10-24 08:07


  Quote:
Originally posted by fastslz at 2006-10-24 07:35:
FOR /? 就是它的全部帮助呀!但是FOR命令不容易掌握哦,灵活应用、及思路很重要。在论坛上多搜索些实例看看~

FOR /?我已经看过来`````可是里面只有FOR /R 和FOR /F的解说````
那个/L的都是我在实例中看到的`````
我根本不知道FOR里面其他的/后面的参数``这样的话灵活应用就不要谈了``
作者: namejm     时间: 2006-10-24 08:30
  请点这里:最强之dos命令 – for

[ Last edited by namejm on 2006-10-24 at 09:36 AM ]
作者: jinstar211     时间: 2006-10-24 08:34
我社么也不懂,来这学习下~~~
作者: vkill     时间: 2006-10-24 09:06
for 的帮助也很好的 啊
作者: lxmxn     时间: 2006-10-24 10:44

  其实for的帮助里面有/L参数的,只是对于新手朋友来说,讲解得比较晦涩难懂,在论坛里面搜索一下就有很多的关于for命令的用法的。
  
  个人感觉要学什么东西,首先要学会怎么去学习,掌握了好的学习方法,学什么都能很顺利的。这才是最重要的。

作者: flyskygen     时间: 2006-10-25 04:27
我也不咋的懂:for /l 是个循环的……
比如: for /l %i in (1,1,1000) echo %i 会显示:1 到1000 1就是开始值,第二个1是增加值,如果是-1就是减少的值,1000就是结束值。
不知道说的对不对
初次来DOS盟吧报到……请各位高手指教……
作者: lxmxn     时间: 2006-10-25 09:47


  Quote:
Originally posted by flyskygen at 2006-10-25 04:27:
我也不咋的懂:for /l 是个循环的……
比如: for /l %i in (1,1,1000) echo %i 会显示:1 到1000 1就是开始值,第二个1是增加值,如果是-1就是减少的值,1000尠...


  说得不错。

for /l %i in (100,-2,60) do @echo %i
的意思就是依次显示在屏幕下显示数字序列:100,98,96,94,……,62,60,其中()中的三个实参分别是起点值,步长(也就是每次的增加量),最后一个参数是结束值,指%i到了60就停止。

再举个例子:
for /l %a in (1,1,255) do @net view 192.168.1.%a
可以查看局域网中IP为192.168.1.1--192.168.1.255的机器的共享资源列表。

作者: ghtfuo     时间: 2006-10-25 23:58
上面的例子第一个很好理解
跟VB没区别
甚至更简单

只是后面的那个
%a是什么意思
in (1,1,255) do @net view 192.168.1.
1,1,255
是不是从192.168.1.1开始每进阶一个数字
然后一直穷举到255?

[ Last edited by ghtfuo on 2006-10-26 at 12:04 AM ]
作者: ghtfuo     时间: 2006-10-26 00:01
类似net view这种语句
是不是也有很多语法格式?
作者: lxmxn     时间: 2006-10-26 00:53


  Quote:
Originally posted by ghtfuo at 2006-10-26 00:01:
类似net view这种语句
是不是也有很多语法格式?


  Re:ghtfuo

    在我上面举的这个命令"for /l %a in (1,1,255) do @net view 192.168.1.%a"中,%a是一个变量,这个变量的具体值,就是括号()中(1,1,255)所代表的1到255的数字序列,这个命令就是执行255次的意思,而变量%a的值会随着for的执行一次而增加一次,就会增加1,也就是我上面所说的步长(就是增长量)了,所以变量%a的值是1,2,3,……,255,这样就依次的增加到255,到了255(结束值)就不执行了,这个for命令的执行也就终止了。当用了这个for命令之后,%a就代表这些数字序列,所以"net view 192.168.1.%a"就表示执行"net view 192.168.1.1"、"net view 192.168.1.2"、"net view 192.168.1.3"、……、"net view 192.168.1。255"了。

    至于net view的语法,其实不是很多,具体的语法可以用"net help view"命令查看其命令行帮助信息。


[ Last edited by lxmxn on 2006-10-26 at 12:55 AM ]
作者: ghtfuo     时间: 2006-10-26 01:03
谢谢了


%a 是指代每一个递增一个步长所取得的数字,也就是后面 (1,1,255)结果的数字集合
是吧

可不可以用%b %c %d

不要在意我打破砂锅问到底啊:D
作者: ghtfuo     时间: 2006-10-26 01:04
明白了……
作者: lxmxn     时间: 2006-10-26 01:36


  Quote:
Originally posted by ghtfuo at 2006-10-26 01:04:
明白了……


 
  Re:ghtfuo
  
    对于你明白了感到欣慰,因为for命令的掌握对于刚接触批处理的朋友来说,都是比较难过的一关。

    另外,补充一下:
  在命令提示符中执行for命令的时候,变量一般用一个%,比如用%a,%b,%i都可以,但是在批处理中执行for命令时,就要用两个%%,比如用%%i,%%a,%%p等,而且变量是区分大小写的,比如%%a与%%A是两个不同的变量。


[ Last edited by lxmxn on 2006-10-26 at 01:39 AM ]
作者: ghtfuo     时间: 2006-10-26 05:05
命令提示符
批处理中

记住了,谢谢你
作者: ghtfuo     时间: 2006-10-26 05:08
for/?

后面有几种用法
作者: ghtfuo     时间: 2006-10-26 05:13
格式就是

for/? %? +方式 +(范围)+动作+起始对象 +%?

是不是这样啊
作者: ghtfuo     时间: 2006-10-26 05:19
意思就是把所求的结果作为一个变量%X以什么样的方式用什么样的范围对一个对象做什么动作
然后把结果显出来?
作者: lxmxn     时间: 2006-10-26 12:15

  恩,大致是这样的吧。只要你自己真正理解了它的原理就够了。还是建议要多多练习for语句的使用,练习多了自然就对它更了解,用它解决问题就更得心应手了。

作者: ghtfuo     时间: 2006-10-27 08:04
好的
谢谢了
我看看cmd中的帮助
作者: ghtfuo     时间: 2006-10-27 08:14
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

file-set
"string"
'command'
各指代的是什么动作

“options”里面是不是可以载入这些
eol=c
skip=n
delims=xxx
tokens=x,y,m-n
usebackq
作者: lxmxn     时间: 2006-10-27 21:46

Re : ghtfuo

  file-set:代表for执行的对象是一个文件,也可以是多个文件,同时支持通配符"?"和"*";

  "string":表示for执行的对象是一个字符串,比如"www.Cn-Dos.Net"这个字符串;
  for /f "tokens=1,* delims=-" %i in ("www.Cn-Dos.Net") do @echo %i+%j执行的结果是:"www.Cn+Dos.Net";

  'command':表示for执行的对象是一个命令的输出,比如"ipconfig /all"这个命令;
  for /f "delims=: tokens=1*" %i in ('ipconfig /all^|find /i "ip address"') do @echo %j执行的结果是你的ip地址.

  至于"Options",你说的是对的.
 
  要多多体会这个命令的用法才能真正掌握它.


[ Last edited by lxmxn on 2006-10-30 at 06:24 AM ]
作者: ghtfuo     时间: 2006-10-30 06:19
delims的意思就是把执行语句中的每一次循环的处理结果,分割组合成一个集
tokens则是取一次往前移动一定步幅所得到的字符?

('ipconfig /add^|find /i "ip address"')这个括号里add^|find /i "的含义我不了解

[ Last edited by ghtfuo on 2006-10-30 at 06:21 AM ]
作者: lxmxn     时间: 2006-10-30 07:04

  Re : ghtfuo

  哦,不要意思啊,打错了,我已经改了,这里的"add"应该是"all",这个"/all"是"ipconfig"命令的参数,它的作用就是显示计算机当前的TCP/IP配置的详细信息,包括IP,MAC,网关,和主机名等相关信息.是相对"ipconfig"命令没有参数的情况的..

  这里的"('ipconfig /all^|find /i "ip address"')"应该看作两个部分来理解,一个是"ipconfig /all",而另一个是"find /i "ip address"",前者在上面已经讲过了,而后者中的"/i"是"find"命令的参数,表示查找时忽略大小写,举个例子吧来看吧.
  比如现在有一个文件abc.txt,里面的内容是:
--------------------abc.txt---------------------------------------------
www.Cn-DoS.net
www.cn-dos.net
--------------------abc.txt---------------------------------------------
只有这两行内容,那么在命令提示符里面执行"find "Cn-DoS" abc.txt",就可以找到第一行的内容,如果你用"find "cn-dos" abc.txt",就可以找到第二行的内容,如果你用到了"/i"这个参数,那么就表示查找字符串的时候忽略大小写,所以如果执行"find /i "cn-Dos" abc.txt"的话,那么abc.txt中的两行内容都可以找到..

  这里的"^|"是管道符,作用是把"ipconfig /all"的结果传输到"find /i "ip address""命令,也可以理解为把"ipconfig /all"的结果作为"find /i "ip address""命令的对象.而这里的"^"符号,是转义字符,之所以加上这个"^",是由于for命令的特性决定的.在for命令的括号里面使用管道符号"|",必须在前面加上一个"^"作为转义.

  另外,建议你多看看系统自带的帮助文档.或者直接在命令行"命令 /?"查看帮助.
hh ntcmds.chm::ntcmds.htm


[ Last edited by lxmxn on 2006-10-30 at 07:30 AM ]
作者: ghtfuo     时间: 2006-10-30 07:15
一说就明白了
就是这个帮助文件找不到了
才问的