添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

外层循环通过call调用子程序进入第二层循环,并将%%i作为参数,传递进去。内层循环通过%1使用第一个参数,也就是%%i。

2.既然有循环那么就有continue和break,continue结束本次迭代,进入到下次迭代中。break则是跳出本循环。

先讲break,它可以通过exit /b实现,例如我们每次都不要输出3,在等于3的时候就直接break掉。那么效果就应该是:

1 2 4

1 2 4 5

实际效果:

1 2 1 21 2完毕!

脚本如下:

@echo off
for /l %%i in (1,1,5) do call :printnum %%i
echo 完毕!
pause
:printnum 
for /l %%j in (1,1,%1) do (
 if %%j equ 3  exit /b
 set /p=%%j<nul
echo,
goto :eof

分析:当i从3开始的时候,内存循环先输出12,当j==3的时候,执行exit /b退出了子程序。 所以最好是子程序全部是循环要做的事情 ,否则exit /b之后的,子程序里循环外的东西都会跳过。上面例子中循环外的的echo,就被跳过了,所以后面输出都是连在一起了。下面链接中给出的讨论break的方法就是如此情形:http://bathome.net/thread-8739-1-1.html,其实这句exit /b跟goto :eof的效果是一样的,都是直接到文件末尾,并不是跳出循环。至于他们说goto :eof就类似于continue,我认为不是这样,它更像return。

关于contiue暂时没有解决办法(break也是诸多限制),以后有进展再补充。

补充 2016.7.18

当时写这篇文章的时候使用的操作系统是Windows Server 2008 R2,现在使用的是Win 10操作系统,发现可以在内层循环中直接使用外层循环变量了。那么例子1中的代码就可以像下面这样写:

@echo off
for /l %%i in (1,1,5) do (
    for /l %%a in (1,1,%%i) do (
	  set /p=%%a<nul
     echo.
pause

运行结果:

关于contiue其实可以反过来思考,之前是不合符条件的跳过,继续下次循环,现在是符合条件的运行,不符合的什么都不做,也就达到了continue的目的。例子2中的代码改写如下:

@echo off
for /l %%i in (1,1,5) do (
    for /l %%a in (1,1,%%i) do (
	  if not %%a==3 (
	     set /p=%%a<nul
     echo.
pause

运行结果: 一、概述  批处理中经常会需要嵌套的for循环,但其用法与c语言是有区别的。在c语言中我们可以很轻松的写出嵌套的for循环:  int i;  int j;  for(i=0;i     for(j=0;j          do something;           continue  or   break;很不幸的是,在批处理中外层循环的变量i是无法在内层循
一、for 循环 for 是最常见的 循环 :var members = ["张三", "李四", "王五"]; for(var i=0; i< members.length; i++){ console.log(members[i]) for 循环 最大的缺点是必须有计数器i和退出的条件,很多数据结构如果不是数组的情况下就无法使用。二、for...in 循环 var members = [...
rem 使用call调用子程序loop,exit /b相当于子程序return,可以带参数如:exit /b 0,则子程序返回0 call :mainLoop pause&goto :eof :mainLoop for /l %%a in (1,1,10) do ( echo %%a set /a r=%%a%%5
1.什么是批处理 1.1批处理(batch) 操作数据库,批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。当向数据库中添加大量的数据时,需要用到批处理。 举例: 送货员的工作: 未使用批处理的时候,送货员每次只能运送 一件货物给商家; 使用批处理,则是送货员将所有要运送的货物, 都用车带到发放处派给客户。 1.2 实现批处理 Statement和Prepa
cd\pressTest del a.txt for /l %%i in (1 1 10) do >>a.txt ab.exe -n 1000 -c 20 -t 60 -C "memberName=sunjm@cjtc.net.cn" http://shipmanagement.cjonline.net.cn/prelogin.do pause 上面是 循环 10次,将每次的结果 在 循环嵌套 中, continue 语句的作用是跳过当前内层 循环 的本次迭代,进入到下一次迭代。如果 continue 语句位于内层 循环 中,那么只有内层 循环 会被跳过;如果 continue 语句位于外层 循环 中,那么内层和外层 循环 都会被跳过,直接进行下一次外层 循环 迭代。 下面是一个示例代码,演示如何在嵌套的for 循环 中使用 continue : #include <stdio.h> int main() { int i, j; // 外层 循环 遍历 0 到 4 for(i = 0; i < 5; i++) { // 内层 循环 遍历 0 到 4 for(j = 0; j < 5; j++) { // 如果 j 能够被 2 整除,则跳过本次内层 循环 迭代 if(j % 2 == 0) { continue ; printf("(%d, %d) ", i, j); printf("\n"); return 0; 以上代码中,内层 循环 会在 j 能够被 2 整除时跳过本次迭代,因此输出结果为: (0, 1) (0, 3) (1, 1) (1, 3) (2, 1) (2, 3) (3, 1) (3, 3) (4, 1) (4, 3) > 不是。当线程执行异常时,会有补偿机制,创建新的线程替换。 3、如果线程池运行中动态设置了corePoolSize > 原始corePoolSize,现有线程数量小于新的corePoolSize,任务队列中还有任务,会自动创建线程吗?是怎么做的? > 会。也是通过addWorker创建。 4、keepAliveTime是空闲线程超时时间,是有定时任务回收空闲线程吗? > 没有。从任务队列获取任务时,有超时时间,就是这个keepAliveTime,超时没有获取到任务,会返回null,然后开始回收线程。 5、为什么获取任务时,workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS)写死了NANOSECONDS,明明创建线程的时候是可以指定时间单位的? > 创建线程池的时候,通过unit.toNanos(keepAliveTime)转换好了时间单位。 C/C++ 中struct嵌套的内存分配 啥时候能不上班: 32位的环境吧这是 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 2301_79464972: 太棒了,太感谢了 表情包 线程池核心线程是如何保持住的? lsqelql: 写得很好,学习了