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

[文件操作] [已解决]批处理删除文件夹下指定类型的文件

请帮忙写个批处理:

1、现在的情况:  d:\backup\ 及其子目录下有大量类似如下文件:123.bak(*.bak) 及其压缩包123.bak.rar(*.bak.rar)同时存在的情况。@@@(原因是:批处理调用rar.exe压缩时虽然添加了 af    参数但未能成功删除源文件)  

2、实现的目的:对d:\backkup\ 及其子目录下的文件名进行比较,当同一文件夹内时出现类似  123.bak  (*.bak) 和 123.bak.rar(*.bak.rar)文件时删除123.bak(*.bak)。

3、如果能在删除前加上调用 rar.exe 进行校验,校验不成功则删除 123.bak.rar (*.123.bak),校验成功再删除123.bak (*.bak),这样就能做到万无一失了。

4、如果能在做一个日志记录文件更好,没有也无所谓。

5、谢谢,不知道大家能看得懂不。  不好意识, 我的要求是不是太搞了


在楼下各位的帮助下,完美代码如下 :
  1. for /r d:\backup %%A in (*.bak.rar) do if exist "%%~dpnA" c:\progra~1\winrar\rar t %%A|findstr /i "全部成功" && del /q /s %%~dpnA>>%%~dpAdelbak.txt || del /q /s %%A>>%%~dpAdelrar.txt && c:\progra~1\winrar\winrar a -k -s -ibck -inul -ep -df -m5 -t %%A %%~dpnA
复制代码

[ 本帖最后由 hong751230 于 2009-10-3 21:56 编辑 ]

回复 1楼 的帖子

第三点是校验什么?其他都还好办
Still with wax

TOP

for %%a in (d:\backup\*.bak) do if exist "%%a.rar" del "%%a"

TOP

原帖由 Lumiere 于 2009-9-27 23:30 发表
第三点是校验什么?其他都还好办

校验rar文件打包成功与否

TOP

原帖由 netbenton 于 2009-9-28 07:23 发表
for %%a in (d:\backup\*.bak) do if exist "%%a.rar" del "%%a"


谢谢,经测试,对d:\backup\ 文件夹非常成功,但对d:\backup\下的子文件夹没有作用。
不知道能不能在 del *。bak前调用rar。exe进行校验,检查rar文件打包是否成功,打包成功后再删除del *。bak。

TOP

这样可以包括所有子目录
for /r d:\backup %%a in (*.bak) do if exist "%%a.rar" del "%%a"

TOP

原帖由 netbenton 于 2009-9-30 07:40 发表
这样可以包括所有子目录
for /r d:\backup %%a in (*.bak) do if exist "%%a.rar" del "%%a"




谢谢 ,不知道能不能在 del *.bak前调用rar.exe进行校验,检查rar文件打包是否成功,打包成功后再删除del *.bak。最好能写一个日志,以备查看。


我想在您的基础上加了一个对*.bak.rar 压缩包的检查,但不知道rar.exe 加 t 参数后怎样判断是rar文件的正确性,就变通了一下,希望对*.bak.rar文件大小的检查,小于60兆的即被视为压缩包文件不正确,*.bak.rar 必须要大于60兆,然后才删除*.bak.
简单的说,就是d:\backup及其子文件夹下,同一文件夹内,出现222.bak 和222.bak.rar时,必须要222.bak.rar 文件大于60兆,才能删除 222.bak,  如果222.bak.rar不大于60兆时就调用rar重新压缩222.bak为222.bak.rar并删除原文件。
我在您的基础上改一代码如下,但不能执行,望指教。

for /r d:\backup %%A in (*.bak.rar) do if  exist "%%~nA" if %%~zA gtr 60000 (del %%~dpnA)  else (c:\progra~1\winrar\rar  a  -k -r -s -ibck -inul -df -m5 -t %%A.rar  %%A)

[ 本帖最后由 hong751230 于 2009-10-1 23:45 编辑 ]

TOP

df            压缩后删除文件

是DF参数吧.....

TOP

for /r d:\backup %%a in (*.bak) do rar u -as "%%a.rar" "%%a"&&del "%%a"

[ 本帖最后由 bhsx 于 2009-10-2 20:49 编辑 ]

TOP

我用这个代码
  1. for /r d:\backup %%A in (*.bak.rar) do if exist "%%~dpnA" if %%~zA gtr 61440 (del %%~dpnA) else (c:\progra~1\winrar\winrar a -k -r -s -ibck -inul -df
  2. -m5 -t %%A %%~dpnA)
复制代码
实现了对d:\backup  及其子目录下,同一文件夹内出现 1111.bak  (*.bak) 和  1111.bak.rar (*.bak.rar)  文件时,如果1111.bak.rar文件大于60兆,则删除1111.bak,如果小于60兆,则调用winrar重新打包。
说明: 1111.bak为sql的备份文件,1111.bak.rar  是1111.bak的压缩包,rar.exe 打包时虽加了参数 df ,但有时还是没有成功删除源文件,为了安全,才对1111.bak.rar进行一个简单的文件大小验证的 。

[ 本帖最后由 hong751230 于 2009-10-3 00:51 编辑 ]

TOP

谢谢楼上各位,在你们的基础上,完美成功。代码如下。
  1. for /r d:\backup %%A in (*.bak.rar) do if exist "%%~dpnA" c:\progra~1\winrar\rar t %%A|findstr /i "全部成功" && del /q /s %%~dpnA>>%%~dpAdelbak.txt || del /q /s %%A>>%%~dpAdelrar.txt && c:\progra~1\winrar\winrar a -k -s -ibck -inul -ep -df -m5 -t %%A %%~dpnA
复制代码
1

评分人数

TOP

返回列表