Board logo

标题: [文件操作] [已解决]批处理如何不删除系统盘c盘下面的空文件夹? [打印本页]

作者: ygqiang    时间: 2011-6-12 09:03     标题: [已解决]批处理如何不删除系统盘c盘下面的空文件夹?

本帖最后由 ygqiang 于 2011-6-23 11:40 编辑
  1. rem 删除空文件夹
  2. for /f "skip=1" %%i in ('wmic logicaldisk where "drivetype=3" get caption') do (
  3.    for /f "tokens=*" %%j in ('dir /s/ad/b %%i') do rd "%%j" 1>nul 2>nul
  4. )
  5. pause
  6. for /f "skip=1" %%i in ('wmic logicaldisk where "drivetype=2" get caption') do (
  7.    for /f "tokens=*" %%j in ('dir /s/ad/b %%i') do rd "%%j" 1>nul 2>nul
  8. )
  9. pause
复制代码
这个代码,可以删除当前所有盘符下,所有的空文件夹。

如何修改,可以实现 不删除 系统盘c盘下面的?
作者: ygqiang    时间: 2011-6-12 09:15

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "skip=1 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
  3.     set disk=%%i&set disk=!disk:~-2!
  4.     for /f "delims=" %%a in ('dir/ad/b/s !disk!') do 2>nul rd %%~fsa\&&echo.成功删除空文件夹:%%a
  5. )
  6. pause
复制代码
以上这个代码
也可以实现删除所有盘下的,所有空文件夹。
作者: 601997526    时间: 2011-6-12 10:20

求人不如求自己
你看看这个你也许会想到一些办法吧
  1. echo %SystemDrive%
复制代码

作者: ygqiang    时间: 2011-6-12 10:46

求人不如求自己
你看看这个你也许会想到一些办法吧echo %SystemDrive%
601997526 发表于 2011-6-12 10:20


这个可以显示C:

但不懂怎么样操作。
作者: ygqiang    时间: 2011-6-12 10:48

本帖最后由 ygqiang 于 2011-6-12 10:56 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. echo 你的所有盘符如下:
  3. for /f "skip=1 delims=\" %%i in ('fsutil fsinfo
  4. drives^|find /v ""') do (
  5. set disk=%%i&set disk=!disk:~-2!
  6. echo.!disk!
  7. )
  8. pause
复制代码
这个代码,可以判断出所有的盘符。
  1. for /f "tokens=*" %%j in ('dir /s/ad/b d:') do rd "%%j" 1>nul 2>nul
复制代码
而这个代码,可以删除d盘下所有的 空目录。



如何结合这2个代码,实现:删除所有盘(系统盘c盘除外)下面的空目录?
作者: 601997526    时间: 2011-6-12 11:03

  1. echo %SystemDrive%
复制代码
这个会显示你的系统盘符
你再加个if判断如果等于系统盘就不执行不就行了吗
作者: Batcher    时间: 2011-6-12 14:36

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "skip=1 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
  4.     set disk=%%i
  5.     set disk=!disk:~-2!
  6.     echo,!disk!
  7.     if "!disk!" -neq "C:" (
  8.         for /f "tokens=*" %%j in ('dir /s /ad /b !disk!') do (
  9.             if exist "%%j\" (
  10.                 rd "%%j" 1>nul 2>nul
  11.             )
  12.         )
  13.     )
  14. )
复制代码

作者: Hello123World    时间: 2011-6-12 16:09

  1. rem 删除空文件夹
  2. for /f "skip=1" %%i in ('wmic logicaldisk where "drivetype=3" get caption') do (
  3.    for /f "tokens=*" %%j in ('dir /s/ad/b %%i') do if not %%i equ c: rd "%%j" 1>nul 2>nul
  4. )
  5. pause
复制代码

作者: ygqiang    时间: 2011-6-12 18:20

本帖最后由 ygqiang 于 2011-6-12 18:59 编辑

目前为止,只找到1个方法:

以下的代码,不行。
  1. rem 删除所有盘(系统盘c盘除外)下面的空目录
  2. for /f "skip=1" %%i in ('wmic logicaldisk where "drivetype=3" get caption') do (
  3.    for /f "tokens=*" %%j in ('dir /s/ad/b %%i') do if not %%i equ c: rd "%%j" >nul 2>nul
  4. )
  5. for /f "skip=1" %%i in ('wmic logicaldisk where "drivetype=2" get caption') do (
  6.    for /f "tokens=*" %%j in ('dir /s/ad/b %%i') do if not %%i equ c: rd "%%j" >nul 2>nul
  7. )
复制代码
更新下:这个方法不行,还是会删除c盘下面的一些空目录,这样开机的时候,xp系统会提示需要安装office的窗口。

只有多次点击取消后,才能关闭这个窗口。
作者: ygqiang    时间: 2011-6-12 18:22

本帖最后由 ygqiang 于 2011-6-12 18:36 编辑

目前为止,只找到1个方法:
  1. rem 删除所有盘(系统盘c盘除外)下面的空目录
  2. @echo off & setlocal enabledelayedexpansion
  3. for /f "skip=1 delims=\" %%i in ('fsutil fsinfo
  4. drives^|find /v ""') do (
  5. set disk=%%i&set disk=!disk:~-2!
  6. if NOT !disk!==%systemdrive% (
  7. for /f "tokens=*" %%j in ('dir /s/ad/b !disk!') do rd "%%j" >nul 2>nul
  8. )
  9. )
复制代码

作者: ygqiang    时间: 2011-6-12 18:23

本帖最后由 ygqiang 于 2011-6-12 18:38 编辑

但上面这个方法,有个缺陷:

如果我在d盘根目录下面,分别建立一个00   11 的空文件夹

将bat代码放在00文件夹下面,运行后,就不会删除d:\11这个空文件夹?

这是什么原因呢?
作者: batman    时间: 2011-6-12 19:50

11# ygqiang
七楼的代码你测试了不。。。
作者: Batcher    时间: 2011-6-13 01:12

11# ygqiang


把@echo off删掉,看看代码为何会跳过哪个文件夹。
作者: ygqiang    时间: 2011-6-13 05:50

11# ygqiang
七楼的代码你测试了不。。。
batman 发表于 2011-6-12 19:50


都测试过。
作者: ygqiang    时间: 2011-6-13 13:15

11# ygqiang


把@echo off删掉,看看代码为何会跳过哪个文件夹。
Batcher 发表于 2011-6-13 01:12


看图片。




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