Board logo

标题: [文件操作] 如何在满足条件的情况下跳出一次for循环继续下一次循环操作 [打印本页]

作者: 0428_hai    时间: 2009-7-23 21:21     标题: 如何在满足条件的情况下跳出一次for循环继续下一次循环操作

如题,问题比较拗口。
可能是个简单,也很容易的问题,但是鄙人菜鸟,不是很懂。
for循环中如何在满足条件的情况下跳出本次循环,继续下一次循环呢?
goto :eof好像是跳出整个循环操作

setlocal enablede……
for /f "delims=" %%i in ('dir /a /b *.txt') do (
echo %%i
set /p var=该文件是你查找的文件吗?
if !var!==n 执行下一次循环,下面的命令不再执行
echo 该文件是欲查找文件。
)

红色字体的命令如何填写?
不用if else写。

[ 本帖最后由 0428_hai 于 2009-7-23 21:29 编辑 ]
作者: Batcher    时间: 2009-7-23 21:38

批处理中的for循环没有像高级语言中的continue命令、
在你的这个代码中使用if else也许是最简洁、最高效的方案。
作者: Lumiere    时间: 2009-7-23 22:51

或者用管道符号||,在if !var!==n 后执行一个无关痛痒但是一定要在if成立的条件下执行成功的命令然后加上“||echo 该文件是欲查找文件。”
作者: more    时间: 2009-7-23 22:51

试试用call看看?
  1. @echo off
  2. for /f "delims=" %%i in ('dir /a /a-d /b *.txt') do (
  3. echo %%i
  4. call :out
  5. )
  6. goto :eof
  7. :out
  8. set var=&set /p var=该文件是你查找的文件吗?:
  9. if /i "%var%"=="n" goto :eof
  10. echo 该文件是欲查找文件。
复制代码

作者: Batcher    时间: 2009-7-23 22:59     标题: 回复 3楼 的帖子

管道符只有一个,那就是|
||、&&、&之类的叫做命令连接符
作者: Lumiere    时间: 2009-7-24 15:52     标题: 回复 5楼 的帖子

管理员真是火眼金眼睛啊,佩服佩服
作者: 0428_hai    时间: 2009-7-24 17:03

原帖由 more 于 2009-7-23 22:51 发表
试试用call看看?@echo off
for /f "delims=" %%i in ('dir /a /a-d /b *.txt') do (
echo %%i
call ut
)
goto :eof
:out
set var=&set /p var=该文件是你查找的文件吗?:
if /i "%var%"=="n" goto :eof
e ...


这位仁兄的方案貌似是可行的,谢谢了。。

原帖由 Batcher 于 2009-7-23 22:59 发表
管道符只有一个,那就是|
||、&&、&之类的叫做命令连接符


题外话,这个&&的作用好像是只有在前面的命令运行成功后,才执行连接符后面的命令,可这个运行成功是什么意思呢?
我删除一个文件 del /f /q a.txt ,这个a.txt文件不存在,算是运行成功吗?为什么?
作者: more    时间: 2009-7-24 17:52

原帖由 0428_hai 于 2009-7-24 17:03 发表


这位仁兄的方案貌似是可行的,谢谢了。。



题外话,这个&&的作用好像是只有在前面的命令运行成功后,才执行连接符后面的命令,可这个运行成功是什么意思呢?
我删除一个文件 del /f /q a.txt ,这个a.txt ...

试试???
  1. @echo off
  2. :agn
  3. md more 2>nul&&echo.创建成功...||(echo.创建失败...&&ping -n 3 127.1>nul&goto :eof)
  4. ping -n 3 127.1>nul
  5. goto :agn
复制代码

作者: 0428_hai    时间: 2009-7-24 20:54

原帖由 more 于 2009-7-24 17:52 发表

试试???
@echo off
:agn
md more 2>nul&&echo.创建成功...||(echo.创建失败...&&ping -n 3 127.1>nul&goto :eof)
ping -n 3 127.1>nul
goto :agn


已测试,将md替换为rd结果也是
成功
失败

但是,将md换为del,那么结果就一直是
成功
成功
成功
……

这是为什么呢?md和rd在创建和删除时遇到已存在或不存在时就是操作失败,可del在没发现要删除的文件时,却依然是操作成功?为什么呢?
作者: Batcher    时间: 2009-7-24 20:55     标题: 回复 7楼 的帖子

尽量减少call命令的使用,否则可能会降低代码执行的效率。
作者: 523066680    时间: 2009-7-24 21:33

不要求速度的情况下如果没别的办法就用用call啦~

刚刚老想用  "a=::" 或"a=" 作为开关判断是否执行的~ 仔细想想也不适合

假如不是必须用call  ,或是用call更适合,那还是用FOR结合IF

因为call的话 后面还是要有判断啊,循环的每次还是有个判断,而且加上调用句
暂时认为,一般的情况还是在For里面直接if判断比较适合。看情况吧。。。

[ 本帖最后由 523066680 于 2009-7-24 21:38 编辑 ]
作者: netbenton    时间: 2009-7-25 18:45

setlocal enablede……
for /f "delims=" %%i in ('dir /a /b *.txt') do (
echo %%i
set /p var=该文件是你查找的文件吗?
if !var!==n (
rem 执行下一次循环,下面的命令不再执行
) else (
echo 该文件是欲查找文件。
))




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