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

[文件操作] [ 讨论 ] 清除某盘下所有内容,除了例外目录。

修改[z:\测试.bat]来运行
保留Z:盘下某个目录下所有内容,其他全删(以bathome目录为例)
即删掉除bathome目录(含子目录及文件)以外的所有文件及目录;
如有多个bathome目录,同上处理。

========================
10.19 :为使题目更加严谨,略做更改
  减少了部分要生成的文件
  增加了删除测试环境部分
  增加了 BatHome 类似目录 BatHome2 和 newBatHome
========================
  1. ::测试环境生成
  2. @echo off
  3. md test
  4. subst z: test
  5. md z:\软件\BatHome\号码 z:\软件\IE "z:\软件\实用 工具" z:\图片\风景 z:\临时 z:\BatHome z:\BatHome2 z:\newBatHome
  6. cd.>z:\BatHome.txt
  7. cd.>z:\测试.bat
  8. cd.>z:\软件\浏览器.exe
  9. cd.>z:\软件\BatHome\BatHome2008.exe
  10. cd.>z:\软件\BatHome\号码\12345.txt
  11. cd.>z:\软件\IE\IE6.exe
  12. cd.>"z:\软件\实用 工具\下载.exe"
  13. cd.>z:\图片\梯田.png
  14. cd.>"z:\图片\风景\美丽 祖国.jpg"
  15. cd.>z:\图片\风景\草原.gif
  16. cd.>z:\临时\!x.temp
  17. cd.>z:\临时\$doc001.tmp
  18. cd.>z:\BatHome\帮助.hlp
  19. attrib +s +h z:\临时\$doc001.tmp
  20. ping -n 4 127.1>nul
  21. start "" z:
  22. goto :eof
复制代码
  1. 清除完后剩下内容:(dir/a/b/s z:\ 结果)
  2. --------------------------------
  3. Z:\>dir/s/b/a
  4. Z:\BatHome
  5. Z:\软件
  6. Z:\BatHome\帮助.hlp
  7. Z:\软件\BatHome
  8. Z:\软件\BatHome\BatHome2008.exe
  9. Z:\软件\BatHome\号码
  10. Z:\软件\BatHome\号码\12345.txt
复制代码
  1. ::删除测试环境
  2. @echo off
  3. rd/q/s test
  4. subst z: /d
复制代码

[ 本帖最后由 wxcute 于 2008-10-19 15:28 编辑 ]

这个好像并不难吧。。。
***共同提高***

TOP

有一定作用,拿来讨论下下

思路好像不难,写起来可能不怎么顺手阿。

TOP

既然楼主这样说了,我就试写一段吧:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s /ad /b z:') do if /i "%%~na" neq "bathome" rd /q /s "%%a"
复制代码
***共同提高***

TOP

测试结果不合要求

4 楼代码测试结果
  1. Z:\>dir/s/b/a
  2. Z:\a.txt
  3. Z:\b.jpg
  4. Z:\BatHome
  5. Z:\测试.bat
  6. Z:\BatHome\帮助.hlp
  7. Z:\BatHome\旧版.exe
  8. Z:\>
复制代码

TOP

能不能将要保留的文件先移走然后format再Xcopy回来

TOP

确实是想简单了,呵呵,思考中。。。
***共同提高***

TOP

  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a z:') do (
  3.      if /i "%%~na" neq "bathome" rd /s /q "z:\%%a" 2>nul||del /s /q /a "z:\%%a" 2>nul
  4. )
  5. pause
复制代码
心绪平和,眼藏静谧。

TOP

有条件的删除或保留,这类文件操作问题我好像记得jm老大说过有专辑
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir/b/a-d') do if not "%%a"=="%~nx0" del/q "%%a"
  3. for /f "delims=" %%a in ('dir/b/s/ad') do (
  4.     set str=%%a
  5.     set var=!str:bathome=!
  6.     if "!var!"=="!str!" rd /s /q "%%a"
  7. )
  8. pause
复制代码
技术问题请到论坛发帖求助!

TOP

回 6 楼
  先备份出来再还原倒是一个思路,但是只有一个盘就不行了。

回复大家
  可能有一点大家没考虑到。
  如果其中一个 bathome 目录是一个比较深的目录,如:Z:\软件\BatHome。
  当列举到目录 z:\软件 时,由于 “软件” 是 “bathome” 的上级目录,这时若不加仔细判断就会用 ”rd/s/q z:\软件“ 删除它,可同时也把 bathome 这个子目录删除了。这样就前功尽弃了。

TOP

写一个吧,条件是要 NTFS 文件系统

FAT32 就要麻烦一点了。
  1. @echo off
  2. for /f %%i in ('dir/ad/b/s^|find /i "\bathome"^|findstr /i /v "bathome."') do (
  3. echo y|cacls "%%i" /t /c /g %username%:r
  4. )
  5. for /f %%i in ('dir/a/b/s') do (
  6. if not "%%i"=="%~f0" rd/s/q "%%i"&del/s/q "%%i"
  7. )
  8. echo y|cacls z:\ /t /c /g %username%:f
  9. del %0
复制代码

TOP

返回列表