批处理脚本:搜索文件,提取数字,并复制到新文件中

时间:2014-07-18 11:34:28

标签: windows batch-file windows-scripting

我是批处理脚本的新手并且有一个问题。我想知道是否可以按要求搜索.txt文件并获取指定的数据并复制到新的.txt文件中?

就像我有50行9位数和一堆其他废话我不需要他们可以说, “对于以1,2,3,4,5,6,7,8或9开头的任何行...取前9位并将它们复制到一个新文件中,对于文件中的所有行? “

我认为这比尝试删除所有其他内容更容易。如果你对如何做到这一点有任何了解,请告诉我!感谢。

以下是一行的示例:
123456789 @例如
我只需要从大约50行中提取9位数字。

3 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
(
FOR /f "delims=" %%a IN (q24824079.txt) DO (
 SET "line=%%a"
 REM set DIGITS to the first 9 characters of LINE
 SET "digits=9!line:~0,9!"
 FOR /L %%z IN (0,1,9) DO SET "digits=!digits:%%z=!"
 IF NOT DEFINED digits ECHO(!line:~0,9!
)
)>newfile.txt

GOTO :EOF

我使用了一个名为q24824079.txt的文件,其中包含我的测试数据。 生成newfile.txt

如果该行是全数字但少于9个字符,则您没有指定要执行的操作。我选择报告该行。

答案 1 :(得分:1)

您可以使用FINDSTR过滤掉所有不以9位数开头的行。然后FOR / F可以逐行读取结果。设置变量,子字符串操作仅保留前9位数。

@echo off
setlocal enableDelayedExpansion
(
  for /f %%A in (
    'findstr "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" yourFile.txt'
  ) do (
    set "ln=%%A"
    echo !ln:~0,9!
  )
)>newFile.txt

答案 2 :(得分:0)

希望这有助于完成工作:

@echo off
setlocal enabledelayedexpansion
for /f %%e in (emails.txt) do (
    echo Email: %%e
    for /f "delims=@ tokens=1" %%b in ("%%e") do (
        set BEGIN=%%b
        echo Name: !BEGIN!
        set FIRST=!BEGIN:~0,1!
        echo First char: !FIRST!
        set /a NUMERIC=!FIRST!+0
        echo Converted to number: !NUMERIC!
        if !FIRST!==!NUMERIC! echo Yippieh!
        echo.
    )
)

而不是echo Yippieh!将电子邮件(%%e)附加到文件,例如像

echo %%e >> output.txt