Board logo

标题: 批处理把每行中等于8个字符的字符串提取出来 [打印本页]

作者: curious    时间: 2009-6-6 21:16     标题: 批处理把每行中等于8个字符的字符串提取出来

假设 a.txt 文本有多行,把每行中等于8个字符的字符串提取出来,其他行过滤掉。
示例文本 a.txt
  1. 12345678 abc cde
  2. 批处理之家
  3. 一二三四五六七八  abcdefgh
  4. 新手练功区欢迎大家
复制代码

作者: Batcher    时间: 2009-6-8 21:17

如果是出题帖,建议在标题中明确写清楚,以免引起不必要的误会,望楼主理解。
作者: sjzong    时间: 2009-6-11 22:42     标题: 回复 1楼 的帖子

请问一行中只有一个字符串,还是可以有多个字符串呢?例如:
12345678  abcdefgh   1254 iiuessss
这样可以吗??
作者: sjzong    时间: 2009-6-11 23:43     标题: 写个试试

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (a.txt) do (set str=%%a&if "!str:~7,1!" neq "" if "!str:~8,1!" equ "" echo %%a)
  4. pause>nul
复制代码

作者: chencg    时间: 2016-4-27 16:05

@echo off

setlocal enabledelayedexpansion

for /f "tokens=*" %%i in (a.txt) do (
        set y=false
        for %%j in (%%i) do (
                set t=%%j
                if "!y!" equ "false" if "!t:~7,1!" neq "" if "!t:~8,1!"=="" set y=true&echo %%j
        )
       
)

pause
作者: chencg    时间: 2016-4-27 16:06

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in (a.txt) do (
  4. set y=false
  5. for %%j in (%%i) do (
  6. set t=%%j
  7. if "!y!" equ "false" if "!t:~7,1!" neq "" if "!t:~8,1!"=="" set y=true&echo %%j
  8. )
  9. )
  10. pause
复制代码

作者: codegay    时间: 2016-4-27 16:56

  1. """
  2. python3
  3. 2016年4月27日 16:50:03 codegay
  4. """
  5. with open("a.txt") as f:
  6.     [print(x) for r in f for x in r.split() if len(x)==8]
复制代码

作者: Nsqs    时间: 2016-4-27 17:27

回复 6# chencg
  1. :On Error Resume Next
  2. set fso=CreateObject("scripting.filesystemobject")
  3. :Sub bat
  4. echo off&cls
  5. cscript -nologo -e:vbs "%0"
  6. pause
  7. Exit Sub
  8. :End Sub
  9. set RegExp=new RegExp:set stdin=wscript.stdin
  10. RegExp.IgnoreCase=true:RegExp.Global=-1
  11. file="1.txt"
  12. RegExp.Pattern="\b.{8}\b"
  13. var=fso.opentextfile(file).readall
  14. set matches=RegExp.Execute(var)
  15. for each match in matches
  16. wsh.echo match
  17. next
复制代码

作者: for_flr    时间: 2021-11-30 10:50

  1. $file=1.txt
  2. get-content $file|foreach{
  3.     foreach ($s in $_.split()) {
  4.     if ($s.length -eq 8) {$s}
  5.     }
  6. }
复制代码
powershell
作者: 唯尘    时间: 2022-10-23 20:55

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
        for %%j in (%%i) do (
                set t=%%j
                if "!t:~7,1!" neq "" if "!t:~8,1!"=="" echo %%j
        )
)
pause
作者: 772074834    时间: 2023-5-5 14:17

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
        set line=%%i
        for %%j in (!line!) do (
                set column=%%j
                set cln8=!column:~7,1!
                set cln9=!column:~8,1!
                if defined cln8 (
                        if not defined cln9 echo %%j
                )
        )
       
)
pause




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2