标题: 请教大家一个批处理的问题
[打印本页]
作者: zzhh612
时间: 2007-3-22 05:53
标题: 请教大家一个批处理的问题
请问有没有一个批处理能实现删除一个目录中的除开指定一类文件外(如*.mp3)的其它所有的文件,以及子文件夹.包括隐藏的和只读的等...
作者: ccwan
时间: 2007-3-22 06:13
有这样的批处理,不过要考虑好要达到的要求,然后再写代码。
因为这个包括的可能情况太多了
作者: NaturalJ0
时间: 2007-3-22 06:22
把你要的文件先移出这目录,再彻底灭了它,最后重建目录,把文件移回去。
这样处理似乎简单点,可以少动些脑筋。
作者: balinger
时间: 2007-3-22 08:28
for /f "tokens=* delims=" %%i in ('dir /a-d /b /s c:\test\') do (
if not %%~xi==.mp3 del "%%i" /f /a /q)
For /f "tokens=* delims=" %%i in ('dir /ad/b/s c:\test\ ^|sort /r') DO (
attrib -h -s -r "%%i"
rd /q "%%i")
Last edited by balinger on 2007-3-22 at 08:34 AM ]
作者: zh159
时间: 2007-3-22 09:36
请自行测试
@echo off
attrib -h -s -r /s /d c:\test\*.*
for /f "delims=" %%i in ('dir /a-d /b /s c:\test\^|find /v ".mp3" 2^>nul') do (
del /q "%%i" 2>nul
rd /q "%%~dpi" 2>nul
)
pause
Last edited by zh159 on 2007-3-21 at 11:25 PM ]
作者: BWSkyer
时间: 2007-3-22 09:41
我现在对FOR还是一无所知,但是我认为可以多写点代码
cd \你要进入的目录
copy *.你要的后缀名 (也可以用xcopy)
cd..
deltree 你不要的那个目录
这样应该也是一种方法吧。我不会FOR,所以只能这么想了。
作者: zh159
时间: 2007-3-22 09:53
rd /q 可以直接去处文件夹
作者: BWSkyer
时间: 2007-3-22 09:56
Originally posted by zh159 at 09:53:
rd /q 可以直接去处文件夹
rd不是只能删除空目录吗? 这里因该不好用吧。
作者: zh159
时间: 2007-3-22 10:25
错了,应该是rd /s /q
rd/?
Last edited by zh159 on 2007-3-21 at 09:28 PM ]
作者: zzhh612
时间: 2007-3-22 10:44
标题: 四楼的balinger,谢谢你的答复
我试用了一下你给出的代码,基本上满足了我的意思,只是我还得把文件移到根目录文件夹中,再删除余下的空文件夹.这个功能也可以加入到其中吗?(就是把指定留下的文件移到第一个文件夹中,不留下子文件夹)...谢了,很佩服你.
作者: zzhh612
时间: 2007-3-22 10:48
标题: 也感谢五楼zh159的答复....
我试用了你给的代码,有一个BUG,就是没有能处理我的隐藏文件和文件夹.不过仍就谢了.愿共同学习.
作者: zh159
时间: 2007-3-22 11:47
attrib -h -s -r /s /d
这句话就可以把当前目录下所有的文件以及子文件夹、子文件夹内的的所有文件都去处“隐藏、系统、只读”属性
attrib -h -s -r /s /d c:\test\
Last edited by zh159 on 2007-3-21 at 10:49 PM ]
作者: zzhh612
时间: 2007-3-22 11:52
标题: 回12楼
我也知道你的意思,但我经过运行,确不能处理掉隐藏文件和文件夹.代码是我直接复制到文本后,再改成.BAT的.我也在找这个问题.
好像你的批处理只能放在第一个目录下才能运行正常.若修改成
attrib -h -s -r /s /d c:\test 后反而在目录下也运行不正常了.
Last edited by zzhh612 on 2007-3-22 at 12:03 PM ]
作者: zh159
时间: 2007-3-22 12:06
attrib -h -s -r /s /d c:\test\*
rd /s /q是直接删除目录+里面的文件,如有mp3文件也一样删除,所以用rd /q
Last edited by zh159 on 2007-3-21 at 11:09 PM ]
作者: zzhh612
时间: 2007-3-22 12:21
标题: 回zh159
搞定了,要将第一句改为attrib -h -s -r /s /d c:\test\*.*
效果与balinger的代码一样.
谢谢.我也有所长劲了...
Last edited by zzhh612 on 2007-3-22 at 12:24 PM ]
作者: balinger
时间: 2007-3-22 13:08
@echo off
set lj=c:\test\
for /f "tokens=* delims=" %%i in ('dir /a-d /b /s %lj%') do (
if not %%~xi==.mp3 del "%%i" /f /a /q
if %%~xi==.mp3 if not %%~pi==%lj:~2% copy "%%i" %lj%
)
For /f "tokens=* delims=" %%i in ('dir /ad/b %lj%') DO (
rd /q /s "%lj%%%i")
Last edited by balinger on 2007-3-22 at 01:20 PM ]