Пакетный сценарий: поиск в файле, извлечение чисел и копирование в новый файл

Я новичок в пакетном скриптинге и у меня есть вопрос. Мне было интересно, можно ли искать файл .txt по требованиям, брать указанные данные и копировать в новый файл .txt?

Например, если у меня есть 50 строк с 9-значными числами и куча другой ерунды, которая мне не нужна после них, могу ли я сказать: «Для любой строки, начинающейся с 1, 2, 3, 4, 5, 6, 7, 8, или 9...возьмем первые 9 цифр и скопируем их в новый файл для всех строк в файле???"

Я думал, что это будет проще, чем пытаться удалить все остальное. Дайте мне знать, если вы знаете что-нибудь о том, как это сделать! Спасибо.

Вот пример того, как выглядит одна строка:
123456789@example
и мне просто нужно извлечь 9-значные числа примерно из 50 строк этого.


person BillytheKid    schedule 18.07.2014    source источник
comment
На какой ОС вы работаете?   -  person alex    schedule 18.07.2014
comment
окна, и я использую текстовую панель   -  person BillytheKid    schedule 18.07.2014
comment
Я не знаю в деталях среду командной строки Windows. Но UNIX-подобные системы предлагают мощные инструменты для работы с текстом из командной строки. Либо переключитесь на Linux или Mac, либо просто используйте простой в освоении язык сценариев. Python будет хорошим началом. Он также является мультиплатформенным.   -  person alex    schedule 18.07.2014
comment
Приведите реальные примеры, если вам нужен реальный пример кода. В противном случае repl.bat — это инструмент, похожий на sed, который использует собственные сценарии Windows и имеет справку, набрав repl /? (от dbenham) — загрузите отсюда: dropbox.com/s/qidqwztmetbvklt/repl.bat   -  person foxidrive    schedule 18.07.2014
comment
Если вы новичок в пакетном написании сценариев, почему бы не использовать язык, с которым вы знакомы?   -  person Thomas Weller    schedule 18.07.2014
comment
@ dg99 Я не согласен с тем, что тег batch-file не имеет значения. Алек четко указывает в вопросе «пакетное выполнение сценариев», не упоминая какой-либо другой язык сценариев Windows, а синтаксис файла .bat охватывается этим тегом.   -  person Patrick M    schedule 18.07.2014
comment
@PatrickM Я не видел в вопросе OP ссылки на помещение этих команд в файл и их запуск, поэтому я подумал, что windows-scripting кажется более подходящим, чем batch-file.   -  person dg99    schedule 18.07.2014
comment
@ dg99 Возможно, в конечном итоге вы правы. windows-scripting не имеет вики, но я предполагал, что она будет включать, например. powershell в дополнение к .bat файлам.   -  person Patrick M    schedule 18.07.2014


Ответы (3)


Вы можете использовать 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
person dbenham    schedule 18.07.2014

@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, содержащий данные для тестирования. Создает новый файл.txt

Вы не указали, что делать, если строка состоит из цифр, но содержит менее 9 символов. Я решил сообщить об этой строке.

person Magoo    schedule 18.07.2014

Надеюсь, это поможет выполнить работу:

@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
person Thomas Weller    schedule 18.07.2014