2016-04-06 4 views
0

У меня есть текстовый файл, который containts материал какОкна - Findstr в течение цикла (содержимое файла)

M  test123 
S  test 
M  abc 

и так далее ...

Я пытаюсь написать пакетный скрипт, который будет выполните следующие действия:

Прочитайте этот текстовый файл, каждая строка поиска для «M              » (с пробелами!), а затем сохранить найденную строку в пр ariable, удалить "M              " и сохранить вывод в отдельном output.txt

Так output.txt должен containt тогда следующее:

test123 
S  test 
abc 

Вот что я так далеко:

SETLOCAL ENABLEDELAYEDEXPANSION 
SET count=1 
FOR /F "tokens=* USEBACKQ" %%F IN (output_whole_check.txt) DO (
SET var!count!=%%F 
findstr /lic:"M  " > nul && (set var!count!=var!count!:~8%) || (echo not found) 
SET /a count=!count!+1 
) 
ENDLOCAL 

Или есть ли более простой способ решить это без каких-либо дополнительных функций, установленных на окнах?

ответ

0

Попробуйте этот. Он перекликается со всеми линиями до output.txt с "M              " заменено ничем.

@echo off & setlocal 

>output.txt (
    FOR /F "usebackq delims=" %%I IN ("output_whole_check.txt") DO (
     set "line=%%I" 
     setlocal enabledelayedexpansion 
     echo(!line:M  =! 
     endlocal 
    ) 
) 

Результат:

test123
S               тест
а


Или, если ваш output_whole_check.txt очень велик, может быть быстрее прокручивать линии, используя цикл for /L. for /L более эффективен, чем for /F. Вам просто нужно получить подсчет строк, чтобы определить, сколько итераций в цикле.

@echo off & setlocal 

rem // get number of lines in the text file 
for /f "tokens=2 delims=:" %%I in ('find /v /c "" "output_whole_check.txt"') do set /a "count=%%I" 

<"output_whole_check.txt" >"output.txt" (
    for /L %%I in (1,1,%count%) do (
     set /P "line=" 
     setlocal enabledelayedexpansion 
     echo(!line:M  =! 
     endlocal 
    ) 
) 

Результат такой же выход.

+0

См. Мое редактирование. Это то, что вы имели в виду? – rojo

+0

это работало отлично для меня :-), и что делать, если я хочу добавить вторую, например, «S ......», что у меня есть «m ....» и «s ...» .. "? –

+0

и что делать, если я хочу удалить также «S .....»? поэтому test123, test, abc остается? –