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

[文件操作] 批处理怎样删除某文件夹之外的其它文件夹?

删除某文件夹之外的其它文件,比如:D:\盘下,有很多文件夹,如:QQ、backup等,现在要求只保留QQ文件夹,如何实现?

PS:对于此问题,很多人都写了相关代码,但原理都几乎是:dir+echo+findstr
因为使用了findstr,效率方面打了折扣,欢迎大家积极讨论,给出更完美的解决方案

贴两则namejm的解决方案:
方法一:
  1. @echo off
  2. :: 排除指定的文件夹,删除其余的目录
  3. :: config.ini 里的文件夹格式为:,+要排除的文件夹名+,
  4. :: code by jm 2006-12-19
  5. for /f "delims=" %%i in ('dir /ad /b') do findstr /i /c:",%%i," config.ini>nul||echo "%%i"
  6. pause
  7. goto :eof
复制代码
方法二:
  1. @echo off
  2. :: echo之后再管道再find的方案比较慢
  3. set dir_=,program files,Documents and Settings,
  4. for /f "delims=" %%i in ('dir /ad /b') do (
  5.     echo "%dir_%"|find /i ",%%i,">nul||echo "%%i"
  6. )
  7. pause
复制代码

TOP

  1. @echo off
  2. set/p nodel=输入不想删除的文件夹:
  3. for /f "delims=" %%i in ('dir /ad /b') do (
  4. for %%a in (%nodel%) do (if "%%i"=="%%a" set del=1)
  5. if defined del (echo 文件夹[%%i],没有删除.&set del=) else (echo 删除文件夹[%%i]))
  6. pause>nul
复制代码

[ 本帖最后由 foxJL 于 2007-12-17 23:06 编辑 ]

TOP

:
  1. @echo off&goto start
  2. 个人认为,2楼的两个代码,效率上都不会很高
  3. 在for的do后面使用findstr这样的外部命令,不会有效率。
  4. 第一个代码效率比第二个高,是因为第二个代码,又多用了一个管道命令。
  5. 以下代码思路:
  6.    利用dir的ah特性,先给要排除的文件夹设为隐藏属性
  7.    再删除所有不具备隐藏属性的文件夹
  8.    再给要排除的文件夹解除隐藏属性,
  9.    再删除所有具有隐藏属性的文件夹。
  10. 以下显示的为要删除的文件夹。要排除的是 “ab cd” 文件夹
  11. :start
  12. set paic=ab cd
  13. attrib +h "%paic%"
  14. for /f "delims=" %%i in ('dir/ad-h/b') do echo %%i
  15. attrib -h "%paic%"
  16. for /f "delims=" %%i in ('dir/adh/b') do echo %%i
  17. pause
复制代码

[ 本帖最后由 随风 于 2007-12-1 22:07 编辑 ]
技术问题请到论坛发帖求助!

TOP

  通过改变文件夹的属性来排除的方法不错,应该是最有效率的方案了。

TOP

通过改变文件夹的属性来排除的方法确实不错,但是如果要排除的文件夹很大,如果装了很多游戏,大小几十G,这样的话,改变这个文件夹的属性如果在WINDOWS下用手动操作一般要好几分钟啊!在DOS下有这个影响没有?

TOP

那你就试试这个.
删除,除qq文件夹以外的文件夹
:
  1. @echo off
  2. for /f "delims=" %%a in ('dir/b/ad') do (
  3. if not "%%a"=="qq" rd/s/q "%%a"
  4. )
  5. pause
复制代码
技术问题请到论坛发帖求助!

TOP

这是上面几种方法中的哪一种啊?
还有,如果我想保留多个文件夹,比如要保留QQ,game等!应该怎么写

另外请问一下,这种方法效率怎么样?谢谢

TOP

效率?
效率取决于你要删除的文件夹的大小,即:rd命令的执行时间.(似乎这不是问题)
如果有多个需要判断的话,就用设置属性的方法吧,应该不会很慢的.
技术问题请到论坛发帖求助!

TOP

我在百度上搜索到了一篇贴子,我看了一下,跟二楼的方法类似,但二楼的方法我没看懂,这篇贴子我看得有点懂了,但也有很多不明白的(自嘲一下:这方面我是菜鸟),我现在发出来,大家评论下,看看如何
----------------------------------------------------------------
@echo off
::如果有多个路径,或者排除多个文件夹:::
::或者排除多个文件,请手工进行设置:::::
::findstr 后面可以跟多个/c:""参数::::::
::如:/c:"game" /c:"qq" /c:"net" ::::::
::中间使用空格间隔:::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::
:: code by zzlike 2006-12-11 CMD@XP::::
::******配置文件开始*****************::
::::::::指定搜索路径::例 e:\ ::::::::::
set "dd=e:\"
::::::::排除文件夹:::::::::::::::::::::
set "dn=game"
::::::::排除文件:::::::::::::::::::::::
set "fn=排除删除文件夹.bat"
::******配置文件结束*****************::
::::::::删除文件夹:::::::::::::::::::::
for /f "delims=" %%i in ('dir /b /ad "%dd%" ^|findstr /i /v /b /e /c:"%dn%"') do attrib -s -h -r -a /s /d "%dd%%%i" && rd /s /q "%dd%%%i"

::::::::删除文件:::::::::::::::::::::::
for /f "delims=" %%i in ('dir /b /a-d "%dd%" ^|findstr /i /v /b /e /c:"%fn%"') do del /a /f /q "%dd%%%i"
-------------------------------------------------------------
我有几个地方没看明白:为什么要set "dn=game"   
这是方便下面用^|findstr /i /v /b /e /c:"%dn%"') 是简写吗?这里的dn其实就是game吗

TOP

原帖由 随风 于 2007-12-17 16:37 发表
效率?
效率取决于你要删除的文件夹的大小,即:rd命令的执行时间.(似乎这不是问题)
如果有多个需要判断的话,就用设置属性的方法吧,应该不会很慢的.


明白
但我想用上面这种办法

TOP

以上方法是用dir遍历所有文件夹,再交给findstr来判断,
不过似乎也只能判断一个文件夹哦.
技术问题请到论坛发帖求助!

TOP

不会吧,看他的贴子好像支持多文件夹排除啊

TOP

确实,是
没注意
技术问题请到论坛发帖求助!

TOP

TOP

返回列表