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

TOP

回复 17# hfxiang

非常感谢再次提出解决和分析方案。在此真诚感谢各位

专家的指教,谢谢!

谢谢大家的热情和参与!

TOP

回复 20# qixiaobin0715


    了解了,谢谢解答!

TOP

回复 14# qixiaobin0715

首先,非常感谢你列举了两个问题的代码。辛苦了!
其次,请问一下专家:运行代码的结果出现了以下情况:
中间行为回车符空行的会提取出来;纯数字字母的可以正常提取到而纯汉字的却

提取不到(同样是2个字符如“2进”和“二进”。好像与字符的字节大小有关)

、或者有少数提取(数字开头的容易获取到哦)。主要是中文汉字,代码2的情况

好于代码1,特别是能在原文件中直接去除字符的方法很好。请教专家是什么情况

,是否可以通过修改代码能解决。再次感谢!

TOP

回复 19# hfxiang

这个正常,感谢解答和分享!

TOP

回复 13# fzp070

代码测试成功运行,功能实现每个文件独立输出到文本,也可以输出到一个文件

,感觉效果很好,还写了3个方案,真诚感谢你的辛苦付出,谢谢!关于if...和

dir及findstr的关系还存疑惑,需继续向专家们学习!

TOP

本帖最后由 qixiaobin0715 于 2022-10-24 14:50 编辑

回复 16# fzp070
还真是这么回事,findstr中的一般表达式对非ASCII字符好像不怎么友好,1个点号代表一个字节,而1个中文字符是2个字节,所以就出现了上述问题,如果是ASCII字符就没问题。至于例子中的最后一行3未显示出来,我想可能是因为文本最后一行未加回车换行。
第2个代码也会有同样的情况出现。已在原楼层作了补充说明。

TOP

回复 18# fzp070


   
俺的电脑测试正常,你试试下面这个
  1. gawk "(length($0)>=3)||(NF==0)" *.txt>4.txt
复制代码
1

评分人数

    • fzp070: 代码精简有效技术 + 1

TOP

回复 17# hfxiang

试了下,第一个代码运行正常。第2个代码运行报错。
  1. gawk: cmd. line:1: length($0)=>3||NF==0
  2. gawk: cmd. line:1:           ^ syntax error
  3. 请按任意键继续. . .
复制代码

TOP

回复 8# WBATW


   
对于文本处置,俺比较喜欢用gawk ( http://bcn.bathome.net/tool/4.1.0/gawk.exe
对于第1个问题
  1. gawk "length($0)<3&&NF" *.txt>3.txt
复制代码
对于第2个问题
  1. gawk "length($0)=>3||NF==0" *.txt>4.txt
复制代码
注意:txt文件应该为ANSI编码格式,如果是UFT-8格式,需用Ruby-3.1.2-1提供的gawk处置

TOP

回复 14# qixiaobin0715
  
     很精简,刚试了下第一个的代码,发现有漏,文本内容如下:
  1. 12345
  2. 12345w
  3. 12345678
  4. 1234
  5. 123
  6. 中文
  7. 中文字
  8. 中国文字
  9. 1
  10. 2
  11. 3
复制代码
运行结果如下:
  1. 1
  2. 2
复制代码
应该要的结果是(提取少于3个字符的行内容):
  1. 中文
  2. 1
  3. 2
  4. 3
复制代码

TOP

回复 8# WBATW


建议你编辑顶楼的帖子内容描述具体需求。

如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 qixiaobin0715 于 2022-10-24 16:05 编辑

回复 8# WBATW
可以不用if而用findstr(感谢fzp070测试,补充说明:只能精确处理ASCII字符,如果存在中文等其它双字节字符,可能会有部分疏漏)
第一个问题:
  1. @echo off
  2. (for /f "tokens=1* delims=:" %%i in ('findstr /s /r /v "..." *.txt') do echo,%%j)>3.txt
复制代码
第二个问题:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /b /a-d *.txt') do (
  3. findstr /r /x /v ". .." "%%i">temp.log
  4. move "temp.log" "%%i"
  5. )
复制代码
以上代码保存为ANSI编码,bat文件放在主目录下。未经测试,请备份好源文件,以免出现问题。

TOP

回复 10# WBATW

提取批处理所在目录的多个文本,少于3位的行内容,保存在文本所在目录,和文本同名-1.txt的文档内(也可以保存在同一个文档内,自己改下)。
  1. @echo off&setlocal EnableDelayedExpansion
  2. set j=1
  3. for /f "delims=" %%i in ('dir /b /a-d /s *.txt') do (
  4. set "tet=%%i"
  5. echo 正在处理文本!j!
  6. for /f "tokens=1 delims=" %%a in ('findstr .* "!tet!"') do (
  7.     set tempa=%%a
  8.         if "!tempa:~2,1!"=="" echo %%a>>!tet!-1.txt
  9. )
  10. set /a j+=1
  11. )
  12. exit
复制代码

TOP

本帖最后由 fzp070 于 2022-10-22 22:59 编辑

回复 8# WBATW


    如下代码是提取a.txt文本文件内容中少于3个字符的行内容 输出到3.txt,保存ANSI格式,确保文本也是ANSI格式。
没有试所有目录子目录下(文件夹)所有文档,所有文档感觉挺复杂的,待高人。
  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "tokens=1 delims=" %%a in (a.txt) do (
  3.     set tempa=%%a
  4.         if "!tempa:~3,1!"=="" echo %%a>>3.txt
  5. )
  6. exit
复制代码
第②个问题我想是这样的:如果不是提取而直接批量删除小于3个字符的行,那么如何保留各个文本原格式不变,比如原来的空行、空格等保留不变。==删除小于3个字符的行,仅针对a.txt一个文本
  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "tokens=1 delims=" %%a in (a.txt) do (
  3.     set tempa=%%a
  4.         if not "!tempa:~2,1!"=="" echo %%a>>3.txt
  5. )
  6. exit
复制代码

TOP

返回列表