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

[文本处理] 【已解决】批处理取文本第一行,然后取出每一行文本中a 的个数

我想打开1.txt。并统计每一行a的个数
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :: 逐行读取1.txt文件并统计每行中A的个数
  4. for /f "delims=" %%a in (1.txt) do (
  5.     set "line=%%a"
  6.     set "count=0"
  7.     :: 使用for循环和参数修饰符来统计A的个数
  8.     for /f "delims=" %%i in ('echo !line! | findstr /r /i /c:"A"') do set /a count+=1
  9.     echo !count!
  10. )
  11. endlocal
复制代码
不运行不知道为什么,哪位指导一下
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 qixiaobin0715 于 2024-8-29 12:22 编辑

开始想错了,以为是统计文本中所有a的数量。已修改。
不区分大小写。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (1.txt) do (
  4.     set n=-1
  5.     set "Line="#%%i#""
  6.     set "Line=!Line:a=" "!"
  7.     for %%j in (!line!) do set /a n+=1
  8.     echo,!n!
  9. )
  10. pause
复制代码
1

评分人数

TOP

本帖最后由 aloha20200628 于 2024-8-29 12:20 编辑

回复 1# qw123456

逐行读取1.txt文件并统计每行中包含字符 a 的个数(不区分大小写)
  1. @echo off &setlocal
  2. for /f "delims=" %%a in (1.txt) do (
  3. echo,%%a>0.0&for %%v in (0.0) do set "v1=%%~zv"
  4. setlocal enabledelayedexpansion &set "s=%%a" &set "s=!s:a=!"
  5. echo,!s!>0.0&for %%v in (0.0) do set "v2=%%~zv"
  6. set/a "v=v1-v2" &echo,本行包含字符 a 的数量 = !v!&endlocal
  7. )
  8. del/q "0.0"&endlocal&pause&exit/b
复制代码

TOP

本帖最后由 aloha20200628 于 2024-8-29 12:28 编辑

回复 1# qw123456

逐行读取1.txt文件并统计每行中包含字符 a 的个数(区分大小写
再给一个区分大小写的版本,须下载 sed.exe 支持(可从本论坛第三方直接下载》http://bcn.bathome.net/
  1. @echo off &setlocal
  2. for /f "delims=" %%a in (1.txt) do (
  3. echo,%%a>0.0&for %%v in (0.0) do set "v1=%%~zv"
  4. echo,%%a|sed "s/a//g">0.0&for %%v in (0.0) do set "v2=%%~zv"
  5. for /f %%v in ('set/a v1-v2') do (echo,本行包含字符 a 的数量 = %%v)
  6. )
  7. del/q "0.0"&endlocal&pause&exit/b
复制代码
1

评分人数

TOP

TOP

回复 2# qixiaobin0715

如源文件中有被双引号包裹的字段,典型格式如 *.csv 文本行,例如:
"qwe",00,"A",23,"a",45
"a",45,"zxc",22
"asd",11,"aa",34
"AA",33
"xyz",89
二楼代码将会刷零...

TOP

回复 6# aloha20200628
确实存在这个问题。

TOP

回复 5# qixiaobin0715


    不知道在哪儿改啊

TOP

回复 8# qw123456
1楼下面点击“编辑”。进入修改页面。

TOP

powershell
忽略空行,忽略大小写
1.txt编码ansi/gbk
  1. gc '1.txt' |where {$_} |foreach {[regex]::matches($_,'(?i)A').count}
复制代码

TOP

  1. @echo off
  2. call :1
  3. cd /d "%~dp0"
  4. for /f "tokens=1* delims=[]" %%a in ('find /n "a" ^<"1.txt"') do (
  5. set str=%%b
  6. setlocal enabledelayedexpansion
  7. set "$1=!$!!str!!str!!str!"
  8. set "$2=!$!!str:a=!!str:a=!!str:a=!"
  9. set /a len=0x!$1:~-3840,3!-0x!$2:~-3840,3!
  10. echo line:%%a count:!len!
  11. endlocal
  12. )
  13. pause
  14. exit
  15. :1
  16. rem "http://www.bathome.net/redirect.php?goto=findpost&ptid=11799&pid=210336"
  17. setlocal enabledelayedexpansion
  18. set a=□0□1□2□3□4□5□6□7□8□9□A□B□C□D□E□F
  19. set b=□0□1□2□3□4
  20. set d=!%a:□=!!a:□=□%!
  21. set $=!%b:□=!!d:□=%!
  22. endlocal & set $=%$%
  23. exit /b
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

RE: 取文件的每一行,然后想取出中间文本求助

本帖最后由 qw123456 于 2024-8-29 14:49 编辑

我想取文本两个字符中间的文本 ,能不能给看看不知道怎么写!!
@echo off &setlocal
for /f "delims=" %%a in (urls.txt) do (
        echo,%%a>0.0&for %%v in (0.0) do set "v1=%%~zv"
        setlocal enabledelayedexpansion &set "s=%%a" &set "s=!s:\=!"
        echo,!s!>0.0&for %%v in (0.0) do set "v2=%%~zv"
        set/a "v=v1-v2"
                set/a "we=v-1"
                set/a "we2=v-1"
                 set "line=%%a"
for /f "tokens=%we%,%we2% delims=\" %%a in ("%line%") do (
    set "middlePart=%%b")
endlocal
)
del/q "0.0"&endlocal&pause&exit/b

pause

TOP

抛开楼主的真实需求,就按1楼的描述,11楼代码考虑到存在空行的问题(真实文本存在空行还是比较常见的),较为全面。

TOP

回复 13# qixiaobin0715


   
谢谢大佬认可!
再看11楼代码,我发现一个问题,既然使用了替换,假设了不区分大小写,find 也应该不区分大小写,疏忽了这一点。
bat小白,请多指教!谢谢!

TOP

返回列表