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

[文件操作] [已解决]批处理怎样删除D盘相同文件夹?

本帖最后由 wang6542975 于 2011-4-5 09:24 编辑

例如  一、 D:下有N个以TEST命名的文件夹,只保留一个剩下的全部删除。(注意还有些文件夹不是在D:根目录下的)
         二、如果连TEST文件夹名都不知道。怎么找出相同的文件夹并只保留一个剩下的全部删除。
1

评分人数

    • tmplinshi: 感谢给帖子标题标注[已解决]字样PB + 2

保留哪个都无所谓的是么?

TOP

2# TX_kakashi


是的,因为里面的内容都一样。

TOP

本帖最后由 TX_kakashi 于 2011-4-4 11:48 编辑

稍做修改,应该可以了
  1. @echo off
  2. set scan_dri=d:
  3. cd/d %scan_dri%
  4. title [Scanning...]
  5. for /f "tokens=*" %%a in ('dir/b/s/ad') do (
  6.      if not defined %%~nxa (set "%%~nxa=s") else (echo rd/s/q "%%a")
  7. )
  8. pause
复制代码

TOP

本帖最后由 wang6542975 于 2011-4-4 11:24 编辑

不行。。运行后的结果如下。我只截了部分
rd/s/q "D:\行健客户端\xjclient\Temp"
rd/s/q "D:\迅雷下载\客户资料"
rd/s/q "D:\迅雷下载\17173shenmo_box_v1.073\17173shenmo_box_v1.073"
rd/s/q "D:\迅雷下载\17173shenmo_box_v1.073\17173shenmo_box_v1.073\Bin"
rd/s/q "D:\迅雷下载\17173shenmo_box_v1.073\17173shenmo_box_v1.073\Update"
rd/s/q "D:\迅雷下载\Dude\Dude"
rd/s/q "D:\迅雷下载\Dude\Dude\data"
rd/s/q "D:\迅雷下载\Dude\Dude\language"
rd/s/q "D:\迅雷下载\Dude\Dude\data\files\images"
rd/s/q "D:\迅雷下载\PanabitWB_20100801_FreeBSD8x_new\boot"

TOP

本帖最后由 tmplinshi 于 2011-4-5 10:54 编辑

4# TX_kakashi



存在几个问题:

1、
pushd d:


如果当前目录为 d 盘的子目录,如 d:\test,执行 pushd d: 不会切换到根目录。(改成 pushd d:\ 就没有这个问题)

另一个相似的情况:如果当前目录是 c:\windows\system32,执行 dir /b/s c: 列出的是 system32 下的文件,而不是从 c:\ 开始。

2、
if not defined %%~na (set "%%~na=s") else (echo rd/s/q "%%a")


应该用 %%~nxa,因为如果文件夹名称是 a.b。

3、把 &setlocal enabledelayedexpansion 去掉吧,防止文件夹名称中有英文感叹号。

修正后的代码为:
  1. @echo off
  2. set scan_dri=d:
  3. pushd %scan_dri%\
  4. title [Scanning...]
  5. for /f "tokens=*" %%a in ('dir/b/s/ad') do (
  6.      if not defined %%~nxa (set "%%~nxa=s") else (echo rd/s/q "%%a")
  7. )
  8. pause
复制代码
1

评分人数

TOP

4# TX_kakashi



存在几个问题:

1、pushd d:

如果当前目录为 d 盘的子目录,如 d:\test,执行 pushd d: 不会切换到根目录。

另一个相似的情况:如果当前目录是 c:\windows\system32,执行 dir /b/s ...
tmplinshi 发表于 2011-4-4 11:43

已修改,感谢指点.

TOP

不行。。运行后的结果如下。我只截了部分
rd/s/q "D:\行健客户端\xjclient\Temp"
rd/s/q "D:\迅雷下载\客户资料"
rd/s/q "D:\迅雷下载\17173shenmo_box_v1.073\17173shenmo_box_v1.073"
rd/s/q "D:\迅雷下载\171 ...
wang6542975 发表于 2011-4-4 11:22

不知道是不是有点理解错了题目的本意,lz的意思是不是D盘下所有名字相同的目录保留一个别的都删除? 如果这样的话一些“大众名字”的文件夹可能会遭到误删,比方说data,icon,update了什么的...

TOP

8# TX_kakashi


没错吧,我也是这么理解的。

TOP

本身批处理对文件名是有要求的,例如不能有=,不能有%,不能有*等等
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

6楼 tmplinshi  版主:
如果当前目录为 d 盘的子目录,如 d:\test,执行 pushd d: 不会切换到根目录。


试验了下:
批处理文件在子目录中,并没有出现问题呀?? XP sp3
  1. @echo %cd%
  2. @echo "%~d0\"
  3. @pushd "%~d0\"
  4. @echo %cd%
  5. @pause
复制代码

TOP

本帖最后由 tmplinshi 于 2011-4-5 12:00 编辑
试验了下:
批处理文件在子目录中,并没有出现问题呀?? XP sp3
@echo %cd%
@echo "%~d0\"
@pushd "%~d0\"
@echo %cd%
@pause

hfg1977 发表于 2011-4-4 12:53

我写的是 pushd d:,不是你试验的 pushd "%~d0\"。

不好意思,之前没有说清楚,让你困惑了。已在帖子中加上了“(改成 pushd d:\ 就没有这个问题)”这句话。其实你仔细看 6 楼的回复的话,“修正后的代码为:”下面的代码写的就是 pushd %scan_dri%\。

TOP

返回列表