Board logo

标题: [文本处理] [已解决]批处理怎样设置一个排除规则? [打印本页]

作者: fanfande    时间: 2011-5-23 14:03     标题: [已解决]批处理怎样设置一个排除规则?

文件夹里面很多html文件
但是很多是不需要的,我想了想
请问可以设置这样的排除规则吗?

①假如文件名的长度少于6个汉字的html文件,删除,比如这样    批处理.html  就是3个汉字
②假如文件名里面含有这个字的html文件,删除
③假如文件名里面含有报价这2个字的html文件,删除
④假如文件名里面含有和讯这2个字的html文件,删除
⑤假如文件名里面含有视频这2个字的html文件,删除
⑥假如文件名里面含有【】这样的符号的html文件,删除
⑦假如此html文件大小小于2k的删除,大于12k的也删除,也就是取2-12k之间的html!
这样我想应该可以删掉一堆不需要的html!
谁帮我看一下好吗?谢谢!
作者: CrLf    时间: 2011-5-23 14:54

其他几条很容易,第一条没说清楚到底是什么意思,是指长度超过12字节的呢?还是名称中包含至少六个双字节字符呢?讲清楚能省很多事
先给出后几条的代码
  1. @echo off
  2. for %%a in (图 报价 和讯 视频 "【*】") do del /q *%%~a*.html
复制代码

作者: fanfande    时间: 2011-5-23 15:36

2# zm900612


你好啊!
第一条的意思
文件名长度小于等于6个汉字即12个字符的时候,属于太短,删除他
作者: CrLf    时间: 2011-5-23 15:45

那太容易了
  1. @echo off
  2. for %%a in (图 报价 和讯 视频 "【*】") do del /q *%%~a*.html
  3. for /f "delims=" %%a in ('dir /b /a-d *.html^|findstr /v ".......\.html$"') do del %%a
复制代码

作者: fanfande    时间: 2011-5-23 15:50

4# zm900612


你好谢谢你这么快的回复!
好像我刚刚测试了一下6个汉字命名的html文件
bat批处理没有把他删除
还有一个问题就是【这里有字】带有这样的括号的也没有清理!
作者: batman    时间: 2011-5-23 16:43

本帖最后由 batman 于 2011-5-23 16:56 编辑

还是中规中矩的好:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.html) do (
  3.      set "str=%%~na"&set "flag="
  4.      if %%~za lss 2048 set "flag=a"
  5.      if %%~za gtr 12288 set "flag=a"
  6.      if "!str:~6!" equ "" set "flag=a"
  7.      for %%b in (图 报价 和讯 视频 【 】) do if "!str:%%b=!" neq "!str!" set "flag=a"
  8.      if defined flag del /q "%%a"
  9. )
复制代码

作者: fanfande    时间: 2011-5-23 16:43



我上面又添加了一条,我重新编辑了一下问题!

作者: CrLf    时间: 2011-5-23 16:55

  1. @echo off 2>nul 3>nul
  2. for %%a in (图 报价 和讯 视频) do del /q *%%a*.html
  3. del /q *【*】*.html
  4. for /f "delims=" %%a in ('dir /b /a-d *.html^|findstr /v ".......\.html$"') do del %%a
  5. for %%a in (*.html) do (
  6.    if %%~za lss 2048 del "%%a"
  7.    if %%~za gtr 12288 del "%%a"
  8. )
  9. pause
复制代码
测试成功
作者: batman    时间: 2011-5-23 16:58

7# fanfande
代码已根据你的变动修改.....
作者: fanfande    时间: 2011-5-23 18:10

本帖最后由 fanfande 于 2011-5-23 18:33 编辑

请问
for /f "delims=" %%a in ('dir /b /a-d *.html^|findstr /v ".......\.html$"') do del %%a

是给  文件名的长度做限制的吗?这个是什么规律啊
比如下面这个5个汉字的命名
批处理论坛.html 属于5个汉字的,如何对他限制呢
小于等于5个汉字的命名文件删除掉
作者: CrLf    时间: 2011-5-23 18:48

楼主要求的不是小等于5个汉字,而是名称长度小等于12个字节,在findstr中一个通配符只对应一个字节,所以只需要用dir+findstr就能筛选少于12个字节长度的文件名了
作者: fanfande    时间: 2011-5-24 00:30

11# zm900612


哈哈,谢谢你哦!
其实是我导致了误会!
应该是2方面的
有文件的命名长度
同时也有文件的大小!

比如

批处理.html    这个文件命名是3个汉字,大小是6k  ,因为他的命名只有3个汉字,所以也不符合!
是这个意思,怪我,不好意思啊!
作者: Batcher    时间: 2011-5-24 00:37

12# fanfande


请把所有的需求全部更新到顶楼
作者: fanfande    时间: 2011-5-24 10:04

11# zm900612


根据管理员的要求,我把需求全部更新到顶楼去了!
作者: CrLf    时间: 2011-5-24 13:06

判断是否含有超过六个双字节字符,若成立则删除:
  1. @echo off&setlocal enabledelayedexpansion 2>nul 3>nul
  2. for %%a in (图 报价 和讯 视频) do del /q *%%a*.html
  3. del /q *【*】*.html
  4. set "test=1111111111111111111111111"
  5. (dir /b *.html|findstr "[^'-Z].*\.html"&echo;)>tmp.txt
  6. ::利用findstr和if对于字符大小的判定规则,排除不含双字节字符的文件,并避免cmd对后缀名的判定障碍for /f "tokens=1* delims=:" %%a in ('findstr /o .* tmp.txt') do (
  7. set tmp=!last!!last!%test:1=-1%%test:1=-1%
  8. rem 表驱动法的另一种思路,利用set /a避免冗长的表变量
  9. set /a n=0,"n=%%a!tmp:~100!-o-6",o=%%a+2
  10. rem 计算字节数与字符数之差
  11. if !n! geq 0 del "!last!"&&echo 已删除!last!
  12. set last=%%~nxb
  13. )
  14. pause
复制代码
应证了两个想法,对这两个新思路比较满意,好玩而且很实用




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