Board logo

标题: [文本处理] [已解决]批处理命令if怎样判断删除文件夹是否成功? [打印本页]

作者: gogo11    时间: 2013-1-18 15:02     标题: [已解决]批处理命令if怎样判断删除文件夹是否成功?

各位大侠,小小菜鸟有个问题
  1. @echo off
  2. del "C:\Documents and Settings\Administrator\桌面\新建文件夹\11.txt"
  3. if %errorlevel% neq 0 goto aa
  4. :aa
  5. del "C:\Documents and Settings\Administrator\桌面\新建文件夹\33.txt"
复制代码
想要打到的目的非常的简单,就是在文件夹删除11.txt,如果删除成功就继续删除33.txt;如果不成功就跳出。可是无论怎么执行都是不管有没有11.txt,33都照删不误。我的目的其实就是上来执行一条del语句,得到他的返回值,成功下一步,不成功跳出。请高人指点!!谢谢啦
作者: hankerer    时间: 2013-1-18 15:42

:aa
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\33.txt"

这两行换一下呢?
作者: gogo11    时间: 2013-1-18 15:52

没太明白怎么换,总之挨行换了一遍,涛声依旧啊,还是在没有11的情况下删除33.txt
作者: gogo11    时间: 2013-1-18 16:00

关键是这个if %errorlevel%,他到底的没得到命令的返回值啊,怎么是1,是0都一样啊
作者: apang    时间: 2013-1-18 16:16

  1. @echo off
  2. del "C:\Documents and Settings\Administrator\桌面\新建文件夹\11.txt"
  3. if "%errorlevel%" neq "0" goto :eof
  4. del "C:\Documents and Settings\Administrator\桌面\新建文件夹\33.txt"
复制代码

作者: gogo11    时间: 2013-1-18 16:49

这个,我试了一下,还是删除33,我把if "%errorlevel%" neq "0" goto :eof 改成if "%errorlevel%" neq "1" goto :eof 了,结果是怎么也不删除33了,成功删除11后就不动了。如果不改还是0的话就无论如何都删除33
作者: gogo11    时间: 2013-1-18 16:51

我是希望执行删除11的语句后,如果成功就再删除33;如果不成够就跳出了,不要去管33
作者: BAT-VBS    时间: 2013-1-18 17:10

  1. @echo off
  2. cd /d "C:\Documents and Settings\Administrator\桌面\新建文件夹\"
  3. del "11.txt" && del 33.txt
复制代码

作者: gogo11    时间: 2013-1-18 17:10

我现在觉得问题就在if errorlevel上,他得到的不是del的返回值,我的问题是怎么得到del的返回把他赋给一个变量,再对这个变量if语句,应该就可以了,怎样得到del的返回值并赋值呢
作者: gogo11    时间: 2013-1-18 17:18

谢谢大家给我帮助。8楼是这样的,我这只是简化了一下我的问题,大体上可以简化为上面的语句,我的真实目的不是删除11或33,而是我要删除一个东西,如果能成,就进行下边的一系列动作,如果不成,就跳出,您这个语句我套不到真实情况里啊,我想的是得到del的返回值,赋给个变量,我说明白了吧,我这么都糊涂了
作者: gogo11    时间: 2013-1-18 17:20

问题是8楼我测试了一下,您这还是在没有11的情况下直接把33删除了啊
作者: ccdevil    时间: 2013-1-18 17:52

  1. for /r d:\cc\bat测试 %%i in (*.txt) do echo %%i >>log.txt
  2. findstr "11.txt" log.txt
  3. if %errorlevel% equ 0 (del "d:\cc\bat测试\11.txt" && del "d:\cc\bat测试\22.txt") else (echo 找不到11)
  4. del "d:\cc\bat测试\log.txt"
  5. pause
复制代码
路径和文件名自己改下把。。
作者: apang    时间: 2013-1-18 19:58

  1. @echo off
  2. pushd "C:\Documents and Settings\Administrator\桌面\新建文件夹\"
  3. del 11.txt 2>&1|find /v "">nul
  4. if "%errorlevel%" neq "0" del 33.txt
复制代码

作者: gogo11    时间: 2013-1-18 21:32

感谢ccdevil,可是我把每一个命令单独放到百度里差,连在一起也没明白你写的这个语句的意思,太丢人了。但是apang的语句我测试了,就是我要的意思,但是我还有点儿疑问,我把程序改了一下
@echo off
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\11.txt" 2>&1|find /v "">nul
if "%errorlevel%" neq "0"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\33.txt"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\44.txt"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\55.txt"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\66.txt"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\77.txt"
程序在成功删除了11之后,就只删除了33,之后的44,55什么的就不管了,他难道不是应该直接顺序执行过来的吗?于是我就又改了一下
@echo off
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\11.txt" 2>&1|find /v "">nul
if "%errorlevel%" neq "0"  goto aa
:aa
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\33.txt"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\44.txt"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\55.txt"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\66.txt"
del "C:\Documents and Settings\Administrator\桌面\新建文件夹\77.txt"
这下可好,还是不管有没有11,下边的都继续执行了,我又开始怀疑那个 if errorlevel的判断到底有没有效果,请问能让我在成功删除11后,顺序执行多个语句吗,谢谢
作者: gogo11    时间: 2013-1-18 21:45

不好意思,我知道到,是自己没弄明白,对不起啦,终于解决了!谢谢各位热心人了!!
作者: BAT-VBS    时间: 2013-1-18 21:53

回复 10# gogo11


    希望以后能否直接说出完整问题,不要绕弯子。
作者: changedirectory    时间: 2013-12-12 09:26

虽然问题已经解决了,本人是批处理的新手,就当练习了。
无论txt文件是否存在,使用del删除的时候返回值都是0,所以才会一直执行下去。
看看这个行不行,请大侠指点:
  1. @ECHO OFF
  2. for /l %%i in (11 11 99) do (
  3.    if exist %%i.txt (del %%i.txt) else goto a
  4. )
  5. pause&exit
  6. :a
  7. pause
复制代码





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