Этот первый код выполняет то, что задает ваш вопрос, но не то, что показывают ваши ожидаемые результаты:
@echo off
:: Pass the entire line to a subroutine
for /f "delims=" %%a in (notas.txt) do call :process %%a
goto :eof
:process
:: Check if we've evaluated the entire line
if "%1"=="" (
echo No number was found in this line
goto :eof
)
:: Check if the current parameter is only numbers
:: If it is, then echo and move on to the next line
:: If not, use shift to evaluate the next parameter
echo %1|findstr /i /r "[^0-9]" >nul && shift && goto :process
echo %1
goto :eof
2 вещи. Во-первых, я не знаю, что вы хотите сделать, если номер не найден в строке. В приведенном выше коде я просто повторю «В этой строке не найдено ни одного номера».
Во-вторых, я предположил, что «число» полностью разделено стандартными пробелами в качестве разделителей. Таким образом, приведенный выше код NOT возвращает 654321
из строки Compra cfme NFS 654321-CIA CBC
, поскольку 654321-CIA
не является числом , разделенным пробелами . Если вам нужны дополнительные разделители, измените эту строку выше:
for /f "delims=" %%a in (notas.txt) do call :process %%a
на:
for /f "tokens=1-10 delims=-., " %%a in (notas.txt) do call :process %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j
добавив любые разделители, которые вы хотите (не забудьте пробел перед двойной кавычкой). Эта строка подходит для до 10 записей в данной строке. Переход к 26 с использованием tokens=1-26
и %%a
до %%z
довольно прост.
Наконец, если вы хотите получить число без разделителей, тогда это будет совершенно другой подход. Примером будет получение 1356
из PC1356 NLA LOA
;или получить 35232
от PC LI-D 35232NDA TTH
.