seltermann
Goto Top

findstr - zeilennummern hinter dateinamen - bei Such-String-Übereinstimmung

Hallo ihr fleißigen Batcher,

wie der Titel schon verrät geht es darum einen String-Vorkommen in mehreren Dateien zu suchen. Die Dateien sollen aufgelistet werden und hinter jeder Datei jeweils die Zeilennummer; mit Semikolons getrennt; dargestellt werden. Das Ergebnis wird in eine Datei geschrieben.

Hier mein fehlerhaftes Skript:

@echo off

SET FILE=#findSTR.txt
SET STR=fmtmemo
SET TMP=temp.txt

set /A z=0
ECHO. > %FILE%
REM findstr /i /m "%STR%" *.dfm > %FILE%

set /A z=0
FOR /F %%A IN (%FILE%) DO (set /A z = "z+1")

COPY /A %FILE% %TMP%

ECHO %z% Dateien enthalten den String: %STR%> %FILE%

IF %z% == 0 GOTO end

ECHO.>>%FILE%
ECHO.>>%FILE%

COPY /A %FILE% + %TMP%
DEL %TMP%

:end

Die auskommentierte Zeile mit REM ist die erste Version die einwandfrei funktioniert um die Dateien aufzulisten die das String-Vorkommen aufweisen.
Da ich das nicht hin bekomme mit den Zeilennummern hinter dem Dateinamen, habe ich versucht die Anzahl der Vorkommen in der Datei zu zählen, was auch nicht richtig funktioniert.

Warum ich das benötige:
Mein Delphi-Programm umfasst über 100 Formulare und ich muss gezielte Änderungen vornehmen. Ohne Auflistung der Dateien müsste ich jede Datei öffnen und selbst nach der Bearbeitung wüsste ich dann nicht, ob die notwendigen Änderungen vollständig sind.

Zusammenfassung:
- Dateien auflisten mit dem String-Vorkommen
- hinter jedem Dateinamen die Zeilennummern auflisten mit Semikolons getrennt (Bsp.: dialogHelp.dfm 20;32;80)

Wenn ihr eine Lösung oder einen Tip parat habt dann postet bitte.
Vielen Dank schon im voraus. face-smile

Content-Key: 65732

Url: https://administrator.de/contentid/65732

Printed on: April 24, 2024 at 19:04 o'clock

Member: bastla
bastla Aug 08, 2007 at 17:51:32 (UTC)
Goto Top
Hallo Seltermann und willkommen im Forum!

Versuch es mit 2 Schleifen:
@echo off & setlocal
set "FILE=#findSTR.txt"  
set "STR=fmtmemo"  

if exist "%FILE%" del "%FILE%"  
set /a Anzahl=0
for /f "delims=" %%i in ('findstr /i /m "%STR%" *.dfm') do call :ProcessFile "%%i"  
echo Dateien: %Anzahl%
type "%FILE%"  
goto :eof

:ProcessFile
set /a Anzahl+=1
set "Line=%~1 "  
set Flag=
for /f "delims=:" %%n in ('type %1^|findstr /n .^|findstr /i "%STR%"') do call :ProcessLine %%n  
(echo %Line%)>>"%FILE%"  
goto :eof

:ProcessLine
if defined Flag set "Line=%Line%;"  
set Flag=True
set "Line=%Line%%1"  
goto :eof

Grüße
bastla
Member: Seltermann
Seltermann Aug 09, 2007 at 07:26:06 (UTC)
Goto Top
Vielen Dank bastla.

Das Skript funktioniert einwandfrei.

Danke

Da das Problem gelöst ist, werde ich morgen den Beitrag schließen.