Board logo

标题: [其他] for循环命令求助 [打印本页]

作者: vspeitao    时间: 2011-6-6 15:14     标题: for循环命令求助

本帖最后由 vspeitao 于 2011-6-6 16:16 编辑
  1. for /l %%a in (1,1,100) do (
  2. for /l %%b in (101,1,127) do  (
  3. for /l %%c in (5,1,8) do (
  4. echo [ServerItem%%a] >>Svrlist.ini
  5. echo GroupId=1 >>Svrlist.ini
  6. echo Description=%%b店 >>Svrlist.ini
  7. echo Server=10.22.%%b.%%c >>Svrlist.ini
  8. echo Port=3389 >>Svrlist.ini
  9. echo Domain= >>Svrlist.ini
  10. echo User=administrator >>Svrlist.ini
  11. echo Password=**** >>Svrlist.ini
  12. echo Width=1024 >>Svrlist.ini
  13. echo Height=768 >>Svrlist.ini
  14. echo FullScreen=0 >>Svrlist.ini
  15. echo ColorDeepth=24 >>Svrlist.ini
  16. )
  17. )
  18. )
复制代码
运行上面的代码后%%a全部是1。这是为什么?
作者: applba    时间: 2011-6-6 15:34

看到这种一排齐的代码就头大了。
还有没有弄清楚层次关系就不要玩嵌套。
作者: batman    时间: 2011-6-6 16:07

************************************************************

家法不可不守!

请阅读论坛发贴规则:

        http://www.bathome.net/thread-963-1-1.html

提示:

        请大家在楼主修改标题并得到管理层认可之前不要给出任何有意义的回复。

        否则一律视为无视论坛纪律扣2分!(管理层和技术组扣4分)

        论坛是大家的,也要靠大家来维护。。。

************************************************************
作者: vspeitao    时间: 2011-6-6 16:08

本帖最后由 vspeitao 于 2011-6-6 16:34 编辑

首先谢谢你的回答,我也弄清楚了是嵌套的问题,但是不知道怎么写才行
这内容是配置文件里的内容
一段为一台电脑的配置
[ServerItem%%a] 这为编号 所以 每次都要把它加进来的
如下:
  1. [ServerItem1]  //这里每次都要加的
  2. GroupId=1
  3. Description=101店
  4. Server=10.22.101.5
  5. Port=3389
  6. Domain=
  7. User=administrator
  8. Password=****
  9. Width=1024
  10. Height=768
  11. FullScreen=0
  12. ColorDeepth=24
  13. [ServerItem2]  //这里每次都要加的
  14. GroupId=1
  15. Description=101店
  16. Server=10.22.101.6
  17. Port=3389
  18. Domain=
  19. User=administrator
  20. Password=****
  21. Width=1024
  22. Height=768
  23. FullScreen=0
  24. ColorDeepth=24
  25. [ServerItem3]   //这里每次都要加的
  26. GroupId=1
  27. Description=101店
  28. Server=10.22.101.7
  29. Port=3389
  30. Domain=
  31. User=administrator
  32. Password=****
  33. Width=1024
  34. Height=768
  35. FullScreen=0
  36. ColorDeepth=24
复制代码
…………一直往下
你的代码我运行了  也不行
作者: vspeitao    时间: 2011-6-6 16:09

我用set /a 这命令为什么在for 里就不会自动加了。?????
作者: CrLf    时间: 2011-6-6 16:12

4# vspeitao


1、请修改标题,避免使用“万金油”
2、请把代码放在code中,可以手动加,也可以选中代码,并点击回复框上方的“<>”按钮,这样比较快
3、请吧所有要求都更新到顶楼,尽量一次性描述准确,可以减少别人的重复劳动
作者: vspeitao    时间: 2011-6-6 16:31

本帖最后由 vspeitao 于 2011-6-6 16:33 编辑

写简单点的就是
  1. NO.1
  2. 10.22.101.5
  3. NO.2
  4. 10.22.101.6
  5. NO.3
  6. 10.22.101.7
  7. NO.4
  8. 10.22.101.8
  9. NO.5
  10. 10.22.102.5
  11. NO.6
  12. 10.22.102.6
  13. NO.7
  14. 10.22.102.7
  15. NO.8
  16. 10.22.102.8
  17. …………
复制代码
生成上面的。这样的批处理应该怎么写
作者: batman    时间: 2011-6-6 16:32

楼主虽然修改了标题,但仍然很模糊,最好按照我三楼给出的链接再修改一次。。。。

代码也请及时放入code标签内。。。
作者: applba    时间: 2011-6-6 16:32

本帖最后由 applba 于 2011-6-6 16:34 编辑
  1. @echo off
  2. SETLOCAL EnablEdElayEdExpansion
  3. (   set /a a=0
  4.     for /l %%b in (101,1,127) do  (     
  5.         for /l %%c in (5,1,8) do (
  6.             set  /a a+=1
  7.             echo [ServerItem!a!]
  8.             echo GroupId=1
  9.             echo Description=%%b店            
  10.             echo Server=10.22.%%b.%%c     
  11.             echo Port=3389     
  12.             echo Domain=     
  13.             echo User=administrator     
  14.             echo Password=****     
  15.             echo Width=1024     
  16.             echo Height=768     
  17.             echo FullScreen=0     
  18.             echo ColorDeepth=24
  19.             echo.            
  20.          )
  21.     )
  22. )>svrlist.ini
  23. start svrlist.ini
复制代码

作者: vspeitao    时间: 2011-6-6 16:33

呃。~~~那我应该改成什么标题啊,,,,偶滴语文表达能力不行啊。
作者: applba    时间: 2011-6-6 16:35

本帖最后由 applba 于 2011-6-6 16:39 编辑

改成 for /l 多层嵌套求助

我看数学不好哇,9楼的代码运行出来有108个ServerItem,不是100个哟。

你一楼给出的代码运行出来有一万个ServerItem,ini文件体积有几个M。
作者: vspeitao    时间: 2011-6-6 16:36

9# applba


谢谢了,为什么set /a命令要加个!!  不加这个为什么不行啊?
作者: mxxcgzxxx    时间: 2011-6-6 21:44

本帖最后由 mxxcgzxxx 于 2011-6-6 21:47 编辑

不用多层的只要一层FOR,数字间的序列组合问题
  1. @echo off&SETLOCAL EnablEdElayEdExpansion
  2. for /l %%1 in (1,1,100) do (
  3.     set "a=%%1"
  4.     set /a b=a+((a-1^)/4-1^)*-4,c=101+(a-1^)/4
  5.     echo [ServerItem%%1] >>Svrlist.ini
  6.     echo GroupId=1 >>Svrlist.ini
  7.     echo Description=!c!店 >>Svrlist.ini
  8.     echo Server=10.22.!b!.!c! >>Svrlist.ini
  9.     echo Port=3389 >>Svrlist.ini
  10.     echo Domain= >>Svrlist.ini
  11.     echo User=administrator >>Svrlist.ini
  12.     echo Password=**** >>Svrlist.ini
  13.     echo Width=1024 >>Svrlist.ini
  14.     echo Height=768 >>Svrlist.ini
  15.     echo FullScreen=0 >>Svrlist.ini
  16.     echo ColorDeepth=24 >>Svrlist.ini
  17.     )
复制代码
顺便问下高手,为什么我的SET后)需要转义?不转义会出错!是什么原理
作者: batman    时间: 2011-6-6 21:49

set /a "a=(1+3)/2"
作者: mxxcgzxxx    时间: 2011-6-6 21:52

set /a "a=(1+3)/2"
batman 发表于 2011-6-6 21:49


是了原来要加“”看来还有很多要学的
作者: applba    时间: 2011-6-7 00:07

我觉得两次嵌套的代码更为直接通用:如果数据改变,你每次都要构造算法来得到b。
另外使用()>svrlist.ini,比多次>>更外高效,你把这个总循环次数调到一万次就非常明显了。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2