找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26837|回复: 14

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

[复制链接]
发表于 2011-5-23 14:03:25 | 显示全部楼层 |阅读模式
文件夹里面很多html文件
但是很多是不需要的,我想了想
请问可以设置这样的排除规则吗?

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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-5-23 14:54:38 | 显示全部楼层
其他几条很容易,第一条没说清楚到底是什么意思,是指长度超过12字节的呢?还是名称中包含至少六个双字节字符呢?讲清楚能省很多事
先给出后几条的代码
  1. @echo off
  2. for %%a in (图 报价 和讯 视频 "【*】") do del /q *%%~a*.html
复制代码
 楼主| 发表于 2011-5-23 15:36:59 | 显示全部楼层
2# zm900612


你好啊!
第一条的意思
文件名长度小于等于6个汉字即12个字符的时候,属于太短,删除他
发表于 2011-5-23 15:45:16 | 显示全部楼层
那太容易了
  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
复制代码
 楼主| 发表于 2011-5-23 15:50:53 | 显示全部楼层
4# zm900612


你好谢谢你这么快的回复!
好像我刚刚测试了一下6个汉字命名的html文件
bat批处理没有把他删除
还有一个问题就是【这里有字】带有这样的括号的也没有清理!
发表于 2011-5-23 16:43:17 | 显示全部楼层
本帖最后由 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. )
复制代码
 楼主| 发表于 2011-5-23 16:43:24 | 显示全部楼层


我上面又添加了一条,我重新编辑了一下问题!
发表于 2011-5-23 16:55:19 | 显示全部楼层
  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
复制代码
测试成功
发表于 2011-5-23 16:58:37 | 显示全部楼层
7# fanfande
代码已根据你的变动修改.....
 楼主| 发表于 2011-5-23 18:10:59 | 显示全部楼层
本帖最后由 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个汉字的命名文件删除掉
发表于 2011-5-23 18:48:54 | 显示全部楼层
楼主要求的不是小等于5个汉字,而是名称长度小等于12个字节,在findstr中一个通配符只对应一个字节,所以只需要用dir+findstr就能筛选少于12个字节长度的文件名了
 楼主| 发表于 2011-5-24 00:30:43 | 显示全部楼层
11# zm900612


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

比如

批处理.html    这个文件命名是3个汉字,大小是6k  ,因为他的命名只有3个汉字,所以也不符合!
是这个意思,怪我,不好意思啊!
发表于 2011-5-24 00:37:57 | 显示全部楼层
12# fanfande


请把所有的需求全部更新到顶楼
 楼主| 发表于 2011-5-24 10:04:57 | 显示全部楼层
11# zm900612


根据管理员的要求,我把需求全部更新到顶楼去了!
发表于 2011-5-24 13:06:36 | 显示全部楼层
判断是否含有超过六个双字节字符,若成立则删除:
  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
复制代码
应证了两个想法,对这两个新思路比较满意,好玩而且很实用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:07 , Processed in 0.023106 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表