标题: [文本处理] [分享]批处理使用多个for命令时每个变量%%i执行的次数 [打印本页]
作者: rsent 时间: 2011-2-23 17:43 标题: [分享]批处理使用多个for命令时每个变量%%i执行的次数
- echo off&cls&&echo 请耐心等待,代码正在执行中...
- for %%a in (1 2 3 4 5) do (
- echo %%a>>a1.txt
- for %%b in (1 2 3 4) do (
- echo %%a>>a2.txt
- for %%c in (1 2 3) do (
- echo %%a>>a3.txt
- for %%d in (1 2) do (
- echo %%a>>a4.txt
- for %%e in (1) do (
- echo %%a>>a5.txt
- )
- )
- )
- )
- )
复制代码
%%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次。你看错了吧
- echo off&cls&&echo 请耐心等待,代码正在执行中...
- findstr /n . a5.txt
- 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
- @echo off&cls&&echo 请耐心等待,代码正在执行中...
- for %%a in (1 2 3 4 5) do (
- >>a1.txt echo %%a
- for %%b in (1 2 3 4) do (
- >>a2.txt echo %%a
- for %%c in (1 2 3) do (
- >>a3.txt echo %%a
- for %%d in (1 2) do (
- >>a4.txt echo %%a
- if not defined n for %%e in (1) do >>a5.txt echo %%a
- set n==
- )))))
复制代码
根据实际情况选择不同的方法
[ 本帖最后由 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,你好。- if not defined n for %%e in (1) do >>a5.txt echo %%a
- set n==
复制代码
是什么意思,能不能解释一下。而且执行后的a5.txt内容为什么是1,不跟a1.txt内容一样.
作者: CrLf 时间: 2011-2-24 22:51
楼主想表达什么?不是很懂- echo off&cls&&echo 请耐心等待,代码正在执行中...
- for %%a in (1 2 3 4 5) do (
- echo %%a>>a1.txt
- echo %%a>>a5.txt
- for %%b in (1 2 3 4) do (
- echo %%a>>a2.txt
- for %%c in (1 2 3) do (
- echo %%a>>a3.txt
- for %%d in (1 2) do (
- echo %%a>>a4.txt
- )
- )
- )
- )
复制代码
或者- echo off&cls&&echo 请耐心等待,代码正在执行中...
- setlocal enabledelayedexpansion
- set n=1" "2" "3" "4" "5
- for %%a in (1 2 3 4 5) do (
- echo %%a>>a1.txt
- for %%b in (1 2 3 4) do (
- echo %%a>>a2.txt
- for %%c in (1 2 3) do (
- echo %%a>>a3.txt
- for %%d in (1 2) do (
- echo %%a>>a4.txt
- for %%e in ("!n!") do (
- set n=
- echo %%a>>a5.txt
- )
- )
- )
- )
- )
复制代码
作者: rsent 时间: 2011-2-24 23:36 标题: 回复 8楼 的帖子
我的意思很简单。请看代码中的提示。。- echo off&cls&&echo 请耐心等待,代码正在执行中...
- for %%a in (1 2 3 4 5) do (
- echo %%a>>a1.txt
- for %%b in (1 2 3 4) do (
- echo %%a>>a2.txt
- for %%c in (1 2 3) do (
- echo %%a>>a3.txt
- for %%d in (1 2) do (
- echo %%a>>a4.txt
- for %%e in (1) do (
- echo %%a>>a5.txt
- rem 请注意上面这行,我想让echo %%a只重复一次。也就是让a5.txt与a1.txt内容一样,有什么办法?
- rem echo %%a 一定要放在这行,不能调到最上面。
- )
- )
- )
- )
- )
复制代码
作者: wc726842270 时间: 2011-2-24 23:50 标题: 回复 9楼 的帖子
唉。早说啊- echo off&cls&&echo 请耐心等待,代码正在执行中...
- for %%a in (1 2 3 4 5) do (
- echo %%a>>a1.txt
- for %%b in (1 2 3 4) do (
- echo %%a>>a2.txt
- for %%c in (1 2 3) do (
- echo %%a>>a3.txt
- for %%d in (1 2) do (
- echo %%a>>a4.txt
- for %%e in (1) do (
- echo %%a>>a5.txt
- goto :eof
- rem 请注意上面这行,我想让echo %%a只重复一次。也就是让a5.txt与a1.txt内容一样,有什么办法?
- rem echo %%a 一定要放在这行,不能调到最上面。
- )
- )
- )
- )
- )
复制代码
作者: rsent 时间: 2011-2-24 23:56 标题: 回复 10楼 的帖子
不对。。
goto :eof 的意思是跳出for的命令循环吧
你那代码的意思只执行第一个 %%a。 而我想要的是执行完%%a,等到的结果也就是5行。每行分别是1 2 3 4 5,也就是a1.txt内容。- for %%a in (1 2 3 4 5) do (
- echo %%a>>a1.txt
复制代码
作者: wc726842270 时间: 2011-2-25 00:56
看来我还是干些有意义的事吧。
另外说一嘴,5=1*5。能不能理解就看你的了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |