[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]判断文件是否存在的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
复制代码
为什么一闪而过。删除掉好像是
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

@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

TOP

  1. @echo off
  2. if not exist %qdj% (echo ok)
  3. pause
复制代码
为什么上面的代码会出错呢?原因是由于qdj这个变量不存在,所以cmd就预处理成:
  1. if not exist  (echo ok)
复制代码
意思就是 如果不存在 (echo  这个文件的话,就执行 ok) 这个命令,而ok)不是可运行的程序或命令,所以就报错了。
时光荏苒||新陈代谢&&涛声依旧||本性难移

TOP

回复 9# terse
谢谢,就是因为这个原因了~~~~~~

TOP

这里 %name%  是否起作用呢 为什么不用 !name!
1

评分人数

TOP

回复 7# BS0小陈


    不知道你想问什么,你这个代码里面没有去掉else啊。

TOP

回复 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去掉就可以了,为什么???

TOP

回复 5# BS0小陈


请把修改之后的完整代码贴出来

TOP

回复 4# DAIC
恩知道了,去掉后还是不行。问题见2楼

TOP

:aa 这种标签不能放在for循环内部

TOP

for中带goto,没有你这种搞法

TOP

好像是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 )
复制代码

TOP

返回列表