标题: [文件操作] [ 讨论 ] 清除某盘下所有内容,除了例外目录。 [打印本页]
作者: wxcute 时间: 2008-10-18 19:12 标题: [ 讨论 ] 清除某盘下所有内容,除了例外目录。
修改[z:\测试.bat]来运行
保留Z:盘下某个目录下所有内容,其他全删(以bathome目录为例)
即删掉除bathome目录(含子目录及文件)以外的所有文件及目录;
如有多个bathome目录,同上处理。
========================
10.19 :为使题目更加严谨,略做更改
减少了部分要生成的文件
增加了删除测试环境部分
增加了 BatHome 类似目录 BatHome2 和 newBatHome
========================- ::测试环境生成
- @echo off
- md test
- subst z: test
- md z:\软件\BatHome\号码 z:\软件\IE "z:\软件\实用 工具" z:\图片\风景 z:\临时 z:\BatHome z:\BatHome2 z:\newBatHome
- cd.>z:\BatHome.txt
- cd.>z:\测试.bat
- cd.>z:\软件\浏览器.exe
- cd.>z:\软件\BatHome\BatHome2008.exe
- cd.>z:\软件\BatHome\号码\12345.txt
- cd.>z:\软件\IE\IE6.exe
- cd.>"z:\软件\实用 工具\下载.exe"
- cd.>z:\图片\梯田.png
- cd.>"z:\图片\风景\美丽 祖国.jpg"
- cd.>z:\图片\风景\草原.gif
- cd.>z:\临时\!x.temp
- cd.>z:\临时\$doc001.tmp
- cd.>z:\BatHome\帮助.hlp
- attrib +s +h z:\临时\$doc001.tmp
- ping -n 4 127.1>nul
- start "" z:
- goto :eof
复制代码
- 清除完后剩下内容:(dir/a/b/s z:\ 结果)
- --------------------------------
- Z:\>dir/s/b/a
- Z:\BatHome
- Z:\软件
- Z:\BatHome\帮助.hlp
- Z:\软件\BatHome
- Z:\软件\BatHome\BatHome2008.exe
- Z:\软件\BatHome\号码
- Z:\软件\BatHome\号码\12345.txt
复制代码
- ::删除测试环境
- @echo off
- rd/q/s test
- subst z: /d
复制代码
[ 本帖最后由 wxcute 于 2008-10-19 15:28 编辑 ]
作者: batman 时间: 2008-10-18 19:14
这个好像并不难吧。。。
作者: wxcute 时间: 2008-10-18 19:17 标题: 有一定作用,拿来讨论下下
思路好像不难,写起来可能不怎么顺手阿。
作者: batman 时间: 2008-10-18 19:21
既然楼主这样说了,我就试写一段吧:- @echo off
- for /f "delims=" %%a in ('dir /s /ad /b z:') do if /i "%%~na" neq "bathome" rd /q /s "%%a"
复制代码
作者: wxcute 时间: 2008-10-18 19:58 标题: 测试结果不合要求
4 楼代码测试结果- Z:\>dir/s/b/a
- Z:\a.txt
- Z:\b.jpg
- Z:\BatHome
- Z:\测试.bat
- Z:\BatHome\帮助.hlp
- Z:\BatHome\旧版.exe
-
- Z:\>
复制代码
作者: qq641255849 时间: 2008-10-18 20:18
能不能将要保留的文件先移走然后format再Xcopy回来
作者: batman 时间: 2008-10-18 20:42
确实是想简单了,呵呵,思考中。。。
作者: pusofalse 时间: 2008-10-18 22:48
- @echo off
- for /f "delims=" %%a in ('dir /b /a z:') do (
- if /i "%%~na" neq "bathome" rd /s /q "z:\%%a" 2>nul||del /s /q /a "z:\%%a" 2>nul
- )
- pause
复制代码
作者: zqz0012005 时间: 2008-10-18 22:54
有条件的删除或保留,这类文件操作问题我好像记得jm老大说过有专辑
作者: 随风 时间: 2008-10-18 22:58
:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir/b/a-d') do if not "%%a"=="%~nx0" del/q "%%a"
- for /f "delims=" %%a in ('dir/b/s/ad') do (
- set str=%%a
- set var=!str:bathome=!
- if "!var!"=="!str!" rd /s /q "%%a"
- )
- pause
复制代码
作者: wxcute 时间: 2008-10-19 15:43
回 6 楼
先备份出来再还原倒是一个思路,但是只有一个盘就不行了。
回复大家
可能有一点大家没考虑到。
如果其中一个 bathome 目录是一个比较深的目录,如:Z:\软件\BatHome。
当列举到目录 z:\软件 时,由于 “软件” 是 “bathome” 的上级目录,这时若不加仔细判断就会用 ”rd/s/q z:\软件“ 删除它,可同时也把 bathome 这个子目录删除了。这样就前功尽弃了。
作者: wxcute 时间: 2008-10-19 17:19 标题: 写一个吧,条件是要 NTFS 文件系统
FAT32 就要麻烦一点了。- @echo off
- for /f %%i in ('dir/ad/b/s^|find /i "\bathome"^|findstr /i /v "bathome."') do (
- echo y|cacls "%%i" /t /c /g %username%:r
- )
- for /f %%i in ('dir/a/b/s') do (
- if not "%%i"=="%~f0" rd/s/q "%%i"&del/s/q "%%i"
- )
- echo y|cacls z:\ /t /c /g %username%:f
- del %0
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |