标题: [文件操作] 批处理删除目录下所有内容时如何排除指定文件夹? [打印本页]
作者: tr0217 时间: 2011-2-24 16:18 标题: 批处理删除目录下所有内容时如何排除指定文件夹?
我这写了一段批处理用于删除多余的主题,但是需要保留XP的默认主题Luna。
也就是需要删除themes目录下的所有文件及目录。但是Luna.theme和Luna文件夹及Luna文件夹下的所有文件夹与文件需要排除
请帮忙改一下
for /f "tokens=*" %%i in ('dir /s /b %systemroot%\Resources\Themes\') do (if not "%%i"=="%systemroot%\Resources\Themes\Luna" if not "%%i"=="%systemroot%\Resources\Themes\Luna.theme" del /f /s /q "%%i" & rd /s /q "%%i")
作者: hanyeguxing 时间: 2011-2-24 16:27
忽略隐藏属性文件:- @echo off
- cd/d %systemroot%\Resources\Themes
- set ""Luna"=="
- for /d %%a in (*) do if not defined "%%a" rd /s /q "%%a"
- set ""Luna.theme"=="
- for %%a in (*) do if not defined "%%a" del /a /f "%%a"
复制代码
作者: batman 时间: 2011-2-24 16:32
请测试后使用,谨慎!- @echo off
- cd /d %systemroot%\Resources\Themes\
- for /r %%a in (*) do if "%%~nxa" neq "luna.theme" del /q "%%a"
- for /f "delims=" %%a in ('dir /ad /b') do if "%%a" neq "Luna" rd /s /q "%%a"
复制代码
[ 本帖最后由 batman 于 2011-2-24 20:29 编辑 ]
作者: lvsehuaxue 时间: 2011-2-24 19:32
3楼的%%~nia是不是应该改为%%~nxa
作者: CrLf 时间: 2011-2-24 22:36
运行前建议先测试- for /f "tokens=*" %%i in ('dir /b /ad %systemroot%\Resources\Themes\^|findstr /v "^^%systemroot%\\Resources\\Themes\Luna\\ Luna.theme$"') do & rd /s /q "%%i"
复制代码
作者: Bearxy 时间: 2011-2-24 23:30
各位大大,我一直看到有关删除文件然后排除指定文件夹或者文件的问题.
相对于FOR来说,我更倾向用XCOPY,当然,我这是个思路。就当抛砖引玉好了。假设我要排除的文件为C盘的1.txt
- xcopy 1.txt d:\
- del *.* /s /f
- xcopy d:\1.txt 当前目录
复制代码
[ 本帖最后由 Bearxy 于 2011-2-24 23:36 编辑 ]
作者: tr0217 时间: 2011-3-8 11:35 标题: 谢谢大家的关注
大家真热心啊。很感动。
在CSDN上问别的问题,经常石沉大海。
作者: Batcher 时间: 2011-3-8 13:10 标题: 回复 7楼 的帖子
CSDN上会写批处理的人太少了
作者: lhy6456210 时间: 2011-3-8 14:37
各位大大的太复杂了,,还是6楼简单啊,先把要用的文件复制出来,删除再复制进去,觉得5楼的相对他们几楼也好理解一点。
[ 本帖最后由 lhy6456210 于 2011-3-8 14:39 编辑 ]
作者: Batcher 时间: 2011-3-8 14:46 标题: 回复 6楼 的帖子
还是多学习集中思路比较行,如果有10G、100G文件就不能copy了。
作者: CrLf 时间: 2011-3-8 15:22
回楼上,大文件也有大文件的办法,文件多时,xcopy确实会比for循环一个个copy快,各有优劣罢了:- attrib /s /d +a
- attrib -a 1.rmvb
- xcopy /a /e .\ ..\tmp
复制代码
- attrib +h 1.rmvb
- xcopy /e .\ ..\tmp
- attrib -h
复制代码
作者: tr0217 时间: 2011-3-9 12:34 标题: 受三楼的提示,我自己改写了一个
cd %systemroot%\Resources\Themes\
rem 首先删除目录这样遍历文件的时候就会少一些
for /d %%a in (*) do (if not "%%a"=="Luna" rd /s /q "%%a")
rem dir /a-d /b这些参数可以只列出当前的目录下第一层文件
for /f "delims=" %%i in ('dir /a-d /b') do (if not "%%i"=="Luna.theme" del /f /q "%%i")
这有点问题,如果放入一大堆批出程序中就不好了,不能先改变当前目录。放入程序中时可以将目录全名放入循环中,
[ 本帖最后由 tr0217 于 2011-3-9 12:39 编辑 ]
作者: tr0217 时间: 2011-3-10 09:45 标题: 这一个可以放到批处理程序中用,不迭代
<code>
for /f "delims=" %%i in ('dir /a-d /b %systemroot%\Resources\Themes\') do (if not "%%i"=="Windows Classic.theme" (if not "%%i"=="Luna.theme" del /f /q "%systemroot%\Resources\Themes\%%i"))
for /f "delims=" %%a in ('dir /b/d "%systemroot%\Resources\Themes\"') do (if not "%%a"=="Luna" rd /s /q "%systemroot%\Resources\Themes\%%a")
</code>
可以很容易改成带参数的。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |