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

[文本处理] [已解决]批处理怎样设置一个排除规则?

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

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
有创新,多创新;无创新,多模仿;无模仿,多坚持

判断是否含有超过六个双字节字符,若成立则删除:
  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
复制代码
应证了两个想法,对这两个新思路比较满意,好玩而且很实用

TOP

11# zm900612


根据管理员的要求,我把需求全部更新到顶楼去了!
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

12# fanfande


请把所有的需求全部更新到顶楼
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

11# zm900612


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

比如

批处理.html    这个文件命名是3个汉字,大小是6k  ,因为他的命名只有3个汉字,所以也不符合!
是这个意思,怪我,不好意思啊!
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

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

TOP

本帖最后由 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个汉字的命名文件删除掉
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

7# fanfande
代码已根据你的变动修改.....
***共同提高***

TOP

  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
复制代码
测试成功

TOP



我上面又添加了一条,我重新编辑了一下问题!
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

本帖最后由 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. )
复制代码
***共同提高***

TOP

4# zm900612


你好谢谢你这么快的回复!
好像我刚刚测试了一下6个汉字命名的html文件
bat批处理没有把他删除
还有一个问题就是【这里有字】带有这样的括号的也没有清理!
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

那太容易了
  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
复制代码

TOP

2# zm900612


你好啊!
第一条的意思
文件名长度小于等于6个汉字即12个字符的时候,属于太短,删除他
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

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

TOP

返回列表