Board logo

标题: [文件操作] 批处理删除目录下所有内容时如何排除指定文件夹? [打印本页]

作者: 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

忽略隐藏属性文件:
  1. @echo off
  2. cd/d %systemroot%\Resources\Themes
  3. set ""Luna"=="
  4. for /d %%a in (*) do if not defined "%%a" rd /s /q "%%a"
  5. set ""Luna.theme"=="
  6. for %%a in (*) do if not defined "%%a" del /a /f "%%a"
复制代码

作者: batman    时间: 2011-2-24 16:32

请测试后使用,谨慎!
  1. @echo off
  2. cd /d %systemroot%\Resources\Themes\
  3. for /r %%a in (*) do if "%%~nxa" neq "luna.theme" del /q "%%a"
  4. 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

运行前建议先测试
  1. 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
  1. xcopy 1.txt d:\
  2. del *.* /s /f
  3. 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快,各有优劣罢了:
  1. attrib /s /d +a
  2. attrib -a 1.rmvb
  3. xcopy /a /e .\ ..\tmp
复制代码
  1. attrib +h 1.rmvb
  2. xcopy /e .\ ..\tmp
  3. 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://bbs.bathome.net/) Powered by Discuz! 7.2