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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 65732
Url: https://administrator.de/contentid/65732
Ausgedruckt am: 26.11.2024 um 08:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo Seltermann und willkommen im Forum!
Versuch es mit 2 Schleifen:
Grüße
bastla
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