标题: [文件操作] [已解决]批处理怎样删除D盘相同文件夹? [打印本页]
作者: wang6542975 时间: 2011-4-4 09:42 标题: [已解决]批处理怎样删除D盘相同文件夹?
本帖最后由 wang6542975 于 2011-4-5 09:24 编辑
例如 一、 D:下有N个以TEST命名的文件夹,只保留一个剩下的全部删除。(注意还有些文件夹不是在D:根目录下的)
二、如果连TEST文件夹名都不知道。怎么找出相同的文件夹并只保留一个剩下的全部删除。
作者: TX_kakashi 时间: 2011-4-4 10:14
保留哪个都无所谓的是么?
作者: wang6542975 时间: 2011-4-4 10:15
2# TX_kakashi
是的,因为里面的内容都一样。
作者: TX_kakashi 时间: 2011-4-4 11:11
本帖最后由 TX_kakashi 于 2011-4-4 11:48 编辑
稍做修改,应该可以了- @echo off
- set scan_dri=d:
- cd/d %scan_dri%
- title [Scanning...]
- for /f "tokens=*" %%a in ('dir/b/s/ad') do (
- if not defined %%~nxa (set "%%~nxa=s") else (echo rd/s/q "%%a")
- )
- pause
复制代码
作者: wang6542975 时间: 2011-4-4 11:22
本帖最后由 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"
作者: tmplinshi 时间: 2011-4-4 11:43
本帖最后由 tmplinshi 于 2011-4-5 10:54 编辑
4# TX_kakashi
存在几个问题:
1、
如果当前目录为 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 去掉吧,防止文件夹名称中有英文感叹号。
修正后的代码为:- @echo off
- set scan_dri=d:
- pushd %scan_dri%\
- title [Scanning...]
- for /f "tokens=*" %%a in ('dir/b/s/ad') do (
- if not defined %%~nxa (set "%%~nxa=s") else (echo rd/s/q "%%a")
- )
- pause
复制代码
作者: TX_kakashi 时间: 2011-4-4 11:49
4# TX_kakashi
存在几个问题:
1、pushd d:
如果当前目录为 d 盘的子目录,如 d:\test,执行 pushd d: 不会切换到根目录。
另一个相似的情况:如果当前目录是 c:\windows\system32,执行 dir /b/s ...
tmplinshi 发表于 2011-4-4 11:43
已修改,感谢指点.
作者: TX_kakashi 时间: 2011-4-4 11:55
不行。。运行后的结果如下。我只截了部分
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了什么的...
作者: tmplinshi 时间: 2011-4-4 11:58
8# TX_kakashi
没错吧,我也是这么理解的。
作者: hanyeguxing 时间: 2011-4-4 12:09
本身批处理对文件名是有要求的,例如不能有=,不能有%,不能有*等等
作者: hfg1977 时间: 2011-4-4 12:53
6楼 tmplinshi 版主:
如果当前目录为 d 盘的子目录,如 d:\test,执行 pushd d: 不会切换到根目录。
试验了下:
批处理文件在子目录中,并没有出现问题呀?? XP sp3- @echo %cd%
- @echo "%~d0\"
- @pushd "%~d0\"
- @echo %cd%
- @pause
复制代码
作者: tmplinshi 时间: 2011-4-5 11:00
本帖最后由 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%\。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |