代码如下:
......
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后外面的循环不循环了,直接到了末尾了,为是么?怎么实现?
批处理 goto会跳出所有循环吗
答案:2 悬赏:60 手机版
解决时间 2021-03-03 01:08
- 提问者网友:你独家记忆
- 2021-03-02 15:51
最佳答案
- 五星知识达人网友:末日狂欢
- 2021-03-02 17:20
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 循环完后可能不应该再执行“子过程” 需要用命令跳开或退出。
结合具体情况,改变思路是可能有更优方案的。
全部回答
- 1楼网友:不想翻身的咸鱼
- 2021-03-02 18:18
goto
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行)
行用 :label 表示
举例
**********************************************************
@echo off
:start
cls
set /p numis=请输入数字1或2:
if /i "%numis%"=="1" goto 1
if /i "%numis%"=="2" (goto 2) else (echo 输入有误!&&pause>nul&&goto start)
:1
echo 你输入的是1
pause>nul&&goto start
:2
echo 你输入的是2
pause>nul&&goto start
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯