2016-04-06 28 views
0

döngü içinde FINDSTR (dosya içeriği) ..., Windows - Ben böyle devam</p> <pre><code>M test123 S test M abc </code></pre> <p>ve benzeri şeyler containts bir metin dosyası var

I will bir toplu senaryo yazmaya çalışıyorum aşağıdakileri yapın:

, bu metin dosyasını oku "M              " için her satırını aramak (boşluklu!) ve daha sonra av bulunan çizgiyi kaydetmek

İşte
test123 
S  test 
abc 

ben var ne: ariable Yani output.txt aşağıdaki ardından containt gerektiği "M              " delete ve ayrı output.txt

yılında çıktı depolamak uzak:

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 

Ya pencerelerin yüklü herhangi bir ek malzeme olmadan bu çözmek için kolay bir yolu var mı?

cevap

0

Bunu deneyin. Tüm satırları output.txt "M              " ile değiştirmez.

@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 
    ) 
) 

Sonuç:

test123'ait
S               Test
abc


Veya output_whole_check.txt dosyanız çok büyükse, for /L döngüsünü kullanarak satırların üstesinden geçmek daha hızlı olabilir. for /L, for /F'dan daha verimlidir. Kaç yinelemenin döneceğini belirlemek için satırların sayısını almanız gerekir.

@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 
    ) 
) 

Sonuç aynı çıktıdır.

+0

Düzenleme bölümüne bakın. Aklında olan şey bu mu? – rojo

+0

bu benim için iyi çalıştı :-) ve "S ......" gibi ikinci bir tane eklemek istiyorum, "m ...." ve "s ..." .. "? –

+0

ve "S ....." yi de kaldırmak istiyorsam ne yapmalıyım? test123, test, abc kaldı? –