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

[文件操作] 批处理删除目录下所有内容时如何排除指定文件夹?

我这写了一段批处理用于删除多余的主题,但是需要保留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")

忽略隐藏属性文件:
  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"
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

请测试后使用,谨慎!
  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 编辑 ]
***共同提高***

TOP

3楼的%%~nia是不是应该改为%%~nxa

TOP

运行前建议先测试
  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"
复制代码

TOP

各位大大,我一直看到有关删除文件然后排除指定文件夹或者文件的问题.
相对于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 编辑 ]

TOP

谢谢大家的关注

大家真热心啊。很感动。
在CSDN上问别的问题,经常石沉大海。

TOP

回复 7楼 的帖子

CSDN上会写批处理的人太少了
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

各位大大的太复杂了,,还是6楼简单啊,先把要用的文件复制出来,删除再复制进去,觉得5楼的相对他们几楼也好理解一点。

[ 本帖最后由 lhy6456210 于 2011-3-8 14:39 编辑 ]

TOP

回复 6楼 的帖子

还是多学习集中思路比较行,如果有10G、100G文件就不能copy了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回楼上,大文件也有大文件的办法,文件多时,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
复制代码

TOP

受三楼的提示,我自己改写了一个

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 编辑 ]

TOP

这一个可以放到批处理程序中用,不迭代

<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>

可以很容易改成带参数的。
1

评分人数

    • Batcher: 请编辑自己的帖子,把代码放到code标签里面 ...PB -2

TOP

返回列表