Board logo

标题: [文本处理] 【已解决】批处理,用于删除某目录下的最新的三个目录外的其它目录 [打印本页]

作者: tdmax3    时间: 2017-8-24 17:13     标题: 【已解决】批处理,用于删除某目录下的最新的三个目录外的其它目录

不明白为什么会报这个错,请大家帮忙看看
  1. @echo off &setlocal enabledelayedexpansion
  2. path = "C:\Users\Desktop\0824"
  3. cd %path%
  4. set /a n = 0
  5. for /d %%i in ("%path%\*") do (
  6.   set /a n=!n!+1
  7. )
  8. set max=3
  9. set count=0
  10. if !n! GTR 3 (
  11. for /d %%a in ('dir  %path%\* /ad /o-d') do (
  12.     set /a count = !count!+1
  13. if !count! GTR %max% ( del /q %%a )  
  14.       )  ) else (   
  15. exit  )
  16. pause
复制代码

作者: Batcher    时间: 2017-8-24 20:17

所有的赋值语句,把等号左右两边的空格删掉。
作者: tdmax3    时间: 2017-8-24 20:36

回复 2# Batcher
嗯,是应该把等号两边的空格删掉,之前也吃过亏了,还是没改掉习惯性打空格。。。
不过这个报错还是没有解决,报错显示是这个for语句里面有问题for /d %%a in ('dir  %path%\* /ad /o-d') ,我在cmd单独执行dir  %path%\* /ad /o-d这一句是可以的,所以就搞不明白了,还请赐教
作者: Batcher    时间: 2017-8-24 20:58

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "mypath=C:\Users\Desktop\0824"
  4. cd "%mypath%"
  5. if errorlevel 1 (
  6.     echo 文件夹不存在 %mypath%
  7.     goto :End
  8. )
  9. set n=0
  10. for /d %%i in ("%mypath%\*") do (
  11.     set /a n=!n!+1
  12. )
  13. set max=3
  14. set count=0
  15. if !n! GTR 3 (
  16.     for /f "delims=" %%a in ('dir /b /ad /o-d "%mypath%"') do (
  17.         set /a count=!count!+1
  18.         if !count! GTR %max% (
  19.             REM 如果显示结果没问题,把下面的 echo 去掉再执行
  20.             echo rd /s /q "%%a"
  21.         )
  22.     )
  23. )
  24. :End
  25. pause
复制代码

作者: Batcher    时间: 2017-8-24 21:00

回复 3# tdmax3


for /d + Command Set 没有这样的语法,建议阅读 for 命令教程:
http://bbs.bathome.net/thread-31727-1-1.html

另外,删除文件夹的命令是 rd,删除文件的命令是 del
作者: tdmax3    时间: 2017-8-25 10:42

回复 5# Batcher

非常感谢你的帮助,我明白了,是不是在使用for /d 的时候in 里面是不能接命令的, 因为一直在想着是要对文件夹进行操作,所以执着于for /d ,并自行进行了扩展;

还有删除文件和删除文件夹命令不同,感谢帮忙指出问题,我的基础太差了,会继续学习的,再次表示感谢~




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