批处理 goto会跳出所有循环吗
代码如下:......chdir%aa%for/d%%iin(*)do(......chdir%bb%for/d%%min(*)do(move/y%%m\*%aa%rd%...
代码如下:
......
chdir %aa%
for /d %%i in (*) do (
......
chdir %bb%
for /d %%m in (*) do (
move /y %%m\* %aa%
rd %%m /q /s
goto next
)
:next
......
chdir %aa%
)
echo OK
......
子循环我每次只想执行一次,然后跳出,接着外面的循环,但是加上goto后外面的循环不循环了,直接到了末尾了,为是么?怎么实现? 展开
......
chdir %aa%
for /d %%i in (*) do (
......
chdir %bb%
for /d %%m in (*) do (
move /y %%m\* %aa%
rd %%m /q /s
goto next
)
:next
......
chdir %aa%
)
echo OK
......
子循环我每次只想执行一次,然后跳出,接着外面的循环,但是加上goto后外面的循环不循环了,直接到了末尾了,为是么?怎么实现? 展开
1个回答
展开全部
for 内如有goto 只能跳出整体for 且不返回,要返回可用call 代goto 但它返回后会接着循环,而不会中止当层循环去继续外层循环
想达到你说的目的,只能另想办法,最笨的一种:改goto 为call 并在执行后设置一“标志性”变量,比如 set f=yes 而当层循环改成条件执行 if not defined f .... 这样就起到了只执行一次的目的,当然还有“配套”工作,本层循环前要清除标志变量 set "f=" 。如你所列的情况就没必要goto 或call 出for循环,直接在for 内用括号括住所有需要执行的代码就行了,而一定要转到for外,还要注意批处理是顺序执行的,一要注意子过程要到结尾才会返回, 二是for 循环完后可能不应该再执行“子过程” 需要用命令跳开或退出。
结合具体情况,改变思路是可能有更优方案的。
想达到你说的目的,只能另想办法,最笨的一种:改goto 为call 并在执行后设置一“标志性”变量,比如 set f=yes 而当层循环改成条件执行 if not defined f .... 这样就起到了只执行一次的目的,当然还有“配套”工作,本层循环前要清除标志变量 set "f=" 。如你所列的情况就没必要goto 或call 出for循环,直接在for 内用括号括住所有需要执行的代码就行了,而一定要转到for外,还要注意批处理是顺序执行的,一要注意子过程要到结尾才会返回, 二是for 循环完后可能不应该再执行“子过程” 需要用命令跳开或退出。
结合具体情况,改变思路是可能有更优方案的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询