标题: [文本处理] [已解决]批处理怎样设置一个排除规则? [打印本页]
作者: 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字节的呢?还是名称中包含至少六个双字节字符呢?讲清楚能省很多事
先给出后几条的代码- @echo off
- for %%a in (图 报价 和讯 视频 "【*】") do del /q *%%~a*.html
复制代码
作者: fanfande 时间: 2011-5-23 15:36
2# zm900612
你好啊!
第一条的意思
文件名长度小于等于6个汉字即12个字符的时候,属于太短,删除他
作者: CrLf 时间: 2011-5-23 15:45
那太容易了- @echo off
- for %%a in (图 报价 和讯 视频 "【*】") do del /q *%%~a*.html
- 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 编辑
还是中规中矩的好:- @echo off&setlocal enabledelayedexpansion
- for %%a in (*.html) do (
- set "str=%%~na"&set "flag="
- if %%~za lss 2048 set "flag=a"
- if %%~za gtr 12288 set "flag=a"
- if "!str:~6!" equ "" set "flag=a"
- for %%b in (图 报价 和讯 视频 【 】) do if "!str:%%b=!" neq "!str!" set "flag=a"
- if defined flag del /q "%%a"
- )
复制代码
作者: fanfande 时间: 2011-5-23 16:43
我上面又添加了一条,我重新编辑了一下问题!
作者: CrLf 时间: 2011-5-23 16:55
- @echo off 2>nul 3>nul
- for %%a in (图 报价 和讯 视频) do del /q *%%a*.html
- del /q *【*】*.html
- for /f "delims=" %%a in ('dir /b /a-d *.html^|findstr /v ".......\.html$"') do del %%a
- for %%a in (*.html) do (
- if %%~za lss 2048 del "%%a"
- if %%~za gtr 12288 del "%%a"
- )
- 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
判断是否含有超过六个双字节字符,若成立则删除:- @echo off&setlocal enabledelayedexpansion 2>nul 3>nul
- for %%a in (图 报价 和讯 视频) do del /q *%%a*.html
- del /q *【*】*.html
- set "test=1111111111111111111111111"
- (dir /b *.html|findstr "[^'-Z].*\.html"&echo;)>tmp.txt
- ::利用findstr和if对于字符大小的判定规则,排除不含双字节字符的文件,并避免cmd对后缀名的判定障碍for /f "tokens=1* delims=:" %%a in ('findstr /o .* tmp.txt') do (
- set tmp=!last!!last!%test:1=-1%%test:1=-1%
- rem 表驱动法的另一种思路,利用set /a避免冗长的表变量
- set /a n=0,"n=%%a!tmp:~100!-o-6",o=%%a+2
- rem 计算字节数与字符数之差
- if !n! geq 0 del "!last!"&&echo 已删除!last!
- set last=%%~nxb
- )
- pause
复制代码
应证了两个想法,对这两个新思路比较满意,好玩而且很实用
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |