Board logo

标题: [其他] 求助批处理中执行del /q/f命令语句后不再执行后续命令是什么原因? [打印本页]

作者: yunyan100    时间: 2016-7-4 23:42     标题: 求助批处理中执行del /q/f命令语句后不再执行后续命令是什么原因?

本帖最后由 pcl_test 于 2016-7-5 13:38 编辑

各位前辈好,本人菜鸟一名, 喜欢捣鼓,根据在网上的资料, 写了如下一段代码,功能 已经 达到, 但在这 过程中有一个疑问, 被 它折磨了很久, 后面突然灵机一动, 一个&就解决了,就是:del /q/f命令执行后,后面的命令 不能 连续执行,需用&连接才行, 但 后面 两条del又不需要,想知道 是 为什么,请各位解惑,谢谢.
  1. @echo off
  2. title 文件移动/复制功能
  3. rem 根据ROBOCOPY 参数不同,功能不同,当前功能为将当前目录下的所有文件复制至指定并删除当前目录的所有文件
  4. rem by 1145846856
  5. set pa=H:\files
  6. copy 移动目录下的文件.bat %temp%
  7. ROBOCOPY %~dp0 *.* %pa% /s
  8. for /f "delims=" %%a in ('dir/ad/b') do rd /s/q "%%~a"
  9. del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
  10. del /q/f %pa%\移动目录下的文件.bat
  11. del /q/f %temp%\移动目录下的文件.bat
  12. ping 127.0.0.1 -n 6 >%temp%\null
  13. del %temp%\null
复制代码
下面是改进版,本来想直接在if 语句里给变量赋值, 就可以省很多代码,但是 值传不出来,不知何解
  1. cho off
  2. title 文件移动/复制功能
  3. rem 根据ROBOCOPY 参数不同,功能不同,当前功能为将当前目录下的所有文件复制至指定并删除当前目录的所有文件
  4. rem by 1145846856
  5. set pa=H:\files
  6. echo.
  7. echo.
  8. @set /p inpa=当前默认目标目录是:%pa%,如需修改请直接输入按回车,不更改直接回车
  9. if "%inpa%" =="" (
  10. goto 1
  11. )else (goto 2
  12. )
  13. :1
  14. copy 移动目录下的文件.bat %temp%
  15. ROBOCOPY %~dp0 *.* %pa% /s
  16. for /f "delims=" %%a in ('dir/ad/b') do rd /s/q "%%~a"
  17. del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
  18. del /q/f %pa%\移动目录下的文件.bat
  19. del /q/f %temp%\移动目录下的文件.bat
  20. ping 127.0.0.1 -n 3 >%temp%\null
  21. del %temp%\null
  22. exit
  23. :2
  24. set pa=%inpa%
  25. copy 移动目录下的文件.bat %temp%
  26. ROBOCOPY %~dp0 *.* %pa% /s
  27. for /f "delims=" %%a in ('dir/ad/b') do rd /s/q "%%~a"
  28. del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
  29. del /q/f %pa%\移动目录下的文件.bat
  30. del /q/f %temp%\移动目录下的文件.bat
  31. ping 127.0.0.1 -n 3 >%temp%\null
  32. del %temp%\null
  33. exit
复制代码

作者: gawk    时间: 2016-7-5 19:21

del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
第一段代码第11行存在逻辑错误。
执行到这一行的时候该批处理文件本身被删掉,后面的命令自然无法执行。
你试试把它放到最后一行吧。
作者: yunyan100    时间: 2016-7-5 23:12

本帖最后由 yunyan100 于 2016-7-6 16:42 编辑

回复 2# gawk


    hi,我也明白del /q/f *    这 个是删除 全部, 包括批处理自己,所以后面的命令是把复制到temp目录下的再复制回来, 我的意思是
  1. del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
复制代码
如果改为
  1. del /q/f *
  2. copy %temp%\移动目录下的文件.bat %~dp0
复制代码
后就在 执行del /q/f * 后不执行 后面的语句,必须要和它放同一行,这样才能执行 呢, 就是想知道原因
因为没有合适的 删除时排除某些文件,所以才用 全删 再复制回来的 方式
  1. @echo off
  2. title 文件移动/复制功能
  3. rem 根据ROBOCOPY 参数不同,功能不同,当前功能为将当前目录下的所有文件复制至指定并删除当前目录的所有文件
  4. rem by 1145846856
  5. set pa=H:\files
  6. set "fi=*.bat|*.txt|*.zip"
  7. echo.
  8. echo.
  9. copy 移动目录下的文件.bat %temp%
  10. @set /p inpa=当前默认目标目录是:%pa%,如需修改请直接输入按回车,不更改直接回车
  11. if "%inpa%" =="" (
  12. goto dd
  13. )else (set pa=%inpa% & goto dd
  14. )
  15. :dd
  16. for /f "delims=| tokens=1-26" %%a in ("%fi%") do (
  17. set aa=%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q %%r %%s %%t %%u %%v %%w %%x %%y %%z
  18. )
  19. ROBOCOPY %~dp0 *.* %pa% /s /xf %aa%
  20. for /f "delims=" %%a in ('dir/ad/b') do rd /s/q "%%~a"
  21. del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
  22. del /q/f %temp%\移动目录下的文件.bat
  23. ping 127.0.0.1 -n 5 >%temp%\null
  24. del %temp%\null
  25. exit
复制代码





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