Board logo

标题: [文件操作] [已解决]判断文件是否存在的BAT批处理错在哪里了? [打印本页]

作者: BS0小陈    时间: 2013-12-31 15:36     标题: [已解决]判断文件是否存在的BAT批处理错在哪里了?

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a num=0
  4. for /r %~dp0 %%i in (*.txt) do (
  5. echo %~dp0%%~nxi
  6. set "name=%~dp0%%~nxi"
  7. :aa
  8. if not exist %name% (
  9. set "name=%~dp0%%num%%~nxi"
  10. goto aa
  11. ) else (
  12. set /a num=0
  13. echo move
  14. )
  15. echo !name!
  16. )
  17. pause
复制代码
为什么一闪而过。删除掉好像是
作者: BS0小陈    时间: 2013-12-31 16:02

好像是if的问题,我单独拿出来时了是
这个运行可以:
  1. if 1==1 ( echo 11 ) else ( echo 22 )
复制代码
这个运行可以:
  1. if not exist %name% ( echo 111)
复制代码
这个就不行了????:
  1. if not exist %name% ( echo 111) else ( echo 222 )
复制代码

作者: apang    时间: 2013-12-31 16:12

for中带goto,没有你这种搞法
作者: DAIC    时间: 2013-12-31 16:15

:aa 这种标签不能放在for循环内部
作者: BS0小陈    时间: 2013-12-31 16:22

回复 4# DAIC
恩知道了,去掉后还是不行。问题见2楼
作者: DAIC    时间: 2013-12-31 17:22

回复 5# BS0小陈


请把修改之后的完整代码贴出来
作者: BS0小陈    时间: 2014-1-2 08:53

回复 6# DAIC
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a num=0
  4. for /r %~dp0 %%i in (*.txt) do (
  5. echo %~dp0%%~nxi
  6. set "name=%~dp0%%~nxi"
  7. if not exist %name% ( echo 111) else ( echo 222 )
  8. echo !name!
  9. )
  10. pause
复制代码
啊else去掉就可以了,为什么???
作者: DAIC    时间: 2014-1-2 09:03

回复 7# BS0小陈


    不知道你想问什么,你这个代码里面没有去掉else啊。
作者: terse    时间: 2014-1-2 12:12

这里 %name%  是否起作用呢 为什么不用 !name!
作者: BS0小陈    时间: 2014-1-3 10:01

回复 9# terse
谢谢,就是因为这个原因了~~~~~~
作者: 悬崖之树    时间: 2014-1-4 22:52

  1. @echo off
  2. if not exist %qdj% (echo ok)
  3. pause
复制代码
为什么上面的代码会出错呢?原因是由于qdj这个变量不存在,所以cmd就预处理成:
  1. if not exist  (echo ok)
复制代码
意思就是 如果不存在 (echo  这个文件的话,就执行 ok) 这个命令,而ok)不是可运行的程序或命令,所以就报错了。
作者: lifei259    时间: 2014-1-5 23:09

@echo off
setlocal enabledelayedexpansion
set /a num=0
for /r %~dp0 %%i in (*.txt) do (
        echo %%i
        set "name=%%i"        
        if not exist !name! ( echo 111) else ( echo 222 )
        echo !name!
)
pause




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