Board logo

标题: [文本处理] [分享]批处理使用多个for命令时每个变量%%i执行的次数 [打印本页]

作者: rsent    时间: 2011-2-23 17:43     标题: [分享]批处理使用多个for命令时每个变量%%i执行的次数

  1. echo off&cls&&echo 请耐心等待,代码正在执行中...
  2. for %%a in (1 2 3 4 5) do (
  3. echo %%a>>a1.txt
  4. for %%b in (1 2 3 4) do (
  5. echo %%a>>a2.txt
  6. for %%c in (1 2 3) do (
  7. echo %%a>>a3.txt
  8. for %%d in (1 2) do (
  9. echo %%a>>a4.txt
  10. for %%e in (1) do (
  11. echo %%a>>a5.txt
  12. )
  13. )
  14. )
  15. )
  16. )
复制代码
%%a执行的次数=1 X下个for命令中的变量数 X 下个for命令中的变量数 X 下个for命令中的变量数 X 下个for命令中的变量数......(一直相乘到最后一个for命令中的变量数)
在a1.txt中    %%a=1                     总计执行1次
在a2.txt中    %%a=1X4                 总计执行4次
在a3.txt中    %%a=1X4X3             总计执行12次
在a4.txt中    %%a=1X4X3X2         总计执行24次
在a5.txt中    %%a=1X4X3X2X1     总计执行24次

所以在多个for命令中,要注意变量%%a摆放的位置,如果摆在本身for命令do的( )内,该%%a只会执行一次。无视多个for命令同时使用。虽然很简单,但是新手不一定知道。

问个问题,怎么在"echo %%a>>a5.txt" 中只显示 %%a一次。 不是24次。

[ 本帖最后由 rsent 于 2011-2-23 20:11 编辑 ]
作者: rsent    时间: 2011-2-23 22:14

问个问题,怎么在"echo %%a>>a5.txt" 中只显示 %%a一次。 不是24次。
作者: wc726842270    时间: 2011-2-24 12:56

是24次。你看错了吧
  1. echo off&cls&&echo 请耐心等待,代码正在执行中...
  2. findstr /n . a5.txt
  3. pause
复制代码

[ 本帖最后由 wc726842270 于 2011-2-24 12:58 编辑 ]
作者: Hello123World    时间: 2011-2-24 15:05

我感觉楼主纠结住了,就好像你在kfc点了一杯可乐,你不停得吸,吸完了,然后你开始思索,怎么就吸完了呢?怎么能让它吸不完呢?怎么吸它不会完呢?
执行一次,不嵌套不就完了。
最后一个for中goto出来也是可行的。

[ 本帖最后由 Hello123World 于 2011-2-24 15:08 编辑 ]
作者: hanyeguxing    时间: 2011-2-24 16:45

  1. @echo off&cls&&echo 请耐心等待,代码正在执行中...
  2. for %%a in (1 2 3 4 5) do (
  3.         >>a1.txt echo %%a
  4.         for %%b in (1 2 3 4) do (
  5.                 >>a2.txt echo %%a
  6.                 for %%c in (1 2 3) do (
  7.                         >>a3.txt echo %%a
  8.                         for %%d in (1 2) do (
  9.                                 >>a4.txt echo %%a
  10.                                 if not defined n for %%e in (1) do >>a5.txt echo %%a
  11.                                 set n==
  12. )))))
复制代码
根据实际情况选择不同的方法

[ 本帖最后由 hanyeguxing 于 2011-2-24 16:46 编辑 ]
作者: rsent    时间: 2011-2-24 17:52     标题: 回复 3楼 的帖子

你会错意了。。。 我是想在 a5.txt 的内容跟a1.txt一样。
原来的a5.txt的内容是a1.txt的24倍。

怎么让echo %%a>>a5.txt与 echo %%a>>a1.txt相等。
作者: rsent    时间: 2011-2-24 17:57     标题: 回复 5楼 的帖子

hanyeguxing,你好。
  1.   if not defined n for %%e in (1) do >>a5.txt echo %%a
  2.                                 set n==
复制代码
是什么意思,能不能解释一下。而且执行后的a5.txt内容为什么是1,不跟a1.txt内容一样.
作者: CrLf    时间: 2011-2-24 22:51

楼主想表达什么?不是很懂
  1. echo off&cls&&echo 请耐心等待,代码正在执行中...
  2. for %%a in (1 2 3 4 5) do (
  3. echo %%a>>a1.txt
  4. echo %%a>>a5.txt
  5. for %%b in (1 2 3 4) do (
  6. echo %%a>>a2.txt
  7. for %%c in (1 2 3) do (
  8. echo %%a>>a3.txt
  9. for %%d in (1 2) do (
  10. echo %%a>>a4.txt
  11. )
  12. )
  13. )
  14. )
复制代码
或者
  1. echo off&cls&&echo 请耐心等待,代码正在执行中...
  2. setlocal enabledelayedexpansion
  3. set n=1" "2" "3" "4" "5
  4. for %%a in (1 2 3 4 5) do (
  5. echo %%a>>a1.txt
  6. for %%b in (1 2 3 4) do (
  7. echo %%a>>a2.txt
  8. for %%c in (1 2 3) do (
  9. echo %%a>>a3.txt
  10. for %%d in (1 2) do (
  11. echo %%a>>a4.txt
  12. for %%e in ("!n!") do (
  13. set n=
  14. echo %%a>>a5.txt
  15. )
  16. )
  17. )
  18. )
  19. )
复制代码

作者: rsent    时间: 2011-2-24 23:36     标题: 回复 8楼 的帖子

我的意思很简单。请看代码中的提示。。
  1. echo off&cls&&echo 请耐心等待,代码正在执行中...
  2. for %%a in (1 2 3 4 5) do (
  3. echo %%a>>a1.txt
  4. for %%b in (1 2 3 4) do (
  5. echo %%a>>a2.txt
  6. for %%c in (1 2 3) do (
  7. echo %%a>>a3.txt
  8. for %%d in (1 2) do (
  9. echo %%a>>a4.txt
  10. for %%e in (1) do (
  11. echo %%a>>a5.txt
  12. rem 请注意上面这行,我想让echo %%a只重复一次。也就是让a5.txt与a1.txt内容一样,有什么办法?
  13. rem echo %%a 一定要放在这行,不能调到最上面。
  14. )
  15. )
  16. )
  17. )
  18. )
复制代码

作者: wc726842270    时间: 2011-2-24 23:50     标题: 回复 9楼 的帖子

唉。早说啊
  1. echo off&cls&&echo 请耐心等待,代码正在执行中...
  2. for %%a in (1 2 3 4 5) do (
  3. echo %%a>>a1.txt
  4. for %%b in (1 2 3 4) do (
  5. echo %%a>>a2.txt
  6. for %%c in (1 2 3) do (
  7. echo %%a>>a3.txt
  8. for %%d in (1 2) do (
  9. echo %%a>>a4.txt
  10. for %%e in (1) do (
  11. echo %%a>>a5.txt
  12. goto :eof
  13. rem 请注意上面这行,我想让echo %%a只重复一次。也就是让a5.txt与a1.txt内容一样,有什么办法?
  14. rem echo %%a 一定要放在这行,不能调到最上面。
  15. )
  16. )
  17. )
  18. )
  19. )
复制代码

作者: rsent    时间: 2011-2-24 23:56     标题: 回复 10楼 的帖子

不对。。
goto :eof   的意思是跳出for的命令循环吧
你那代码的意思只执行第一个 %%a。 而我想要的是执行完%%a,等到的结果也就是5行。每行分别是1 2 3 4 5,也就是a1.txt内容。
  1. for %%a in (1 2 3 4 5) do (
  2. echo %%a>>a1.txt
复制代码

作者: wc726842270    时间: 2011-2-25 00:56

看来我还是干些有意义的事吧。
另外说一嘴,5=1*5。能不能理解就看你的了




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