Board logo

标题: [文件操作] 【已解决】批处理如何删除除指定目录和文件外的所有文件(夹)? [打印本页]

作者: quboboo    时间: 2013-6-15 09:23     标题: 【已解决】批处理如何删除除指定目录和文件外的所有文件(夹)?

本帖最后由 quboboo 于 2013-6-18 14:59 编辑

比如想删除D盘所有文件,除了A、B、C三个目录和D.sys一个文件,应该怎么写呢?

没有黑框要用VBS?那该怎么写?

请大家帮忙,谢谢
作者: apang    时间: 2013-6-15 20:06

本帖最后由 apang 于 2013-6-15 20:08 编辑
  1. @echo off
  2. pushd "d:\"
  3. for /f "delims=" %%a in ('dir /b^|findstr /ivrbe "a b c d.sys"') do (
  4.     if exist "%%a\" (echo rd /s /q "%%a\")else echo del "%%a"
  5. )
  6. pause
复制代码

作者: quboboo    时间: 2013-6-15 23:13

本帖最后由 quboboo 于 2013-6-18 09:18 编辑

非常感谢,休息后上班再测试

今天上班来测试,发现可用但需要改进,状况如下:
使用楼上兄弟提供的代码,只显示删除命令,所以我把最后两个的“echo”删掉,测试时能删除文件和文件夹,但对于隐藏的文件(夹)无效。

另外,保留的文件(夹)名中有空格该怎么写?

请再指点下,不胜感激
作者: quboboo    时间: 2013-6-18 09:18

今天上班来测试,发现可用但需要改进,状况如下:
使用楼上兄弟提供的代码,只显示删除命令,所以我把最后两个的“echo”删掉,测试时能删除文件和文件夹,但对于隐藏的文件(夹)无效。

另外,保留的文件(夹)名中有空格该怎么写?

请再指点下,不胜感激
作者: terse    时间: 2013-6-18 09:58

修改下
  1. @echo off&setlocal enabledelayedexpansion
  2. pushd "d:\"
  3. for %%i in ("d.sys" "x y" "a" "b" "c" "a b c.sys") do set v=!v! /c:%%i
  4. for /f "delims=" %%a in ('dir /b^|findstr /ixv%v%') do (
  5.     if exist "%%a\" (echo rd /s /q "%%a\")else echo del "%%a"
  6. )
  7. pause
复制代码

作者: apang    时间: 2013-6-18 10:43

有些隐藏文件和文件夹用这种方法是没法删除的,比如hiberfil.sys、pagefile.sys 和 System Volume Information。改一下,未作测试
  1. @echo off
  2. set re="新建 文件夹" "a" "b" "c d.sys"
  3. pushd "D:\"
  4. for /f "delims=" %%a in ('dir /a/b^|findstr/ixvc:%re:" "=" /c:"%') do (
  5.     if exist "%%a\" (
  6.         echo rd /s /q "%%a\" 2>nul
  7.     ) else echo del /a /f "%%a" 2>nul
  8. )
  9. pause
复制代码

作者: quboboo    时间: 2013-6-18 14:58

回复 6# apang


    可以用,谢谢
作者: 522235677    时间: 2013-6-18 21:19

加echo 是防止错误,误删除别的文件。先看下命令确认一下




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2