bodyparts
Goto Top

Suchausdruck in Datei schreiben

Hallo,

ich muss über eine Ordner einen Ausdruck in TXT Dateien suchen, wird dieser Ausdruck gefunden, möchte ich gerne eine Liste haben in der steht in welchem Ordner diese Datei bzw der Ausdruck liegt.

"Mein" Überlegung auf Basis eines anderen Posting

mfg an Bastla

@echo off & setlocal

set "Ordner=X:\Daten\"
set "Datei=Daten_info.txt"
set /P suche=Wert eingeben:


for /d %%i in ("%Ordner%*.*") do call :ProcessDir "%%i"

goto :eof

:ProcessDir

if not exist "%~1\%Datei%" goto :eof

set /p Name=<"%~1\%Datei%"
echo %Name%
pause
if %Name%=%suche% then echo %Name%%Ordner% >> %Ordner%Ausgabe.txt


goto :eof


In der Datei Ausgabe.txt sollten dann die Ordner gelistet sein indem der Ausdruck liegt bzw in der txt Datei steht.

gruß
Kommentar vom Moderator Biber am 07.10.2009 um 11:49:30 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Shell".

Content-Key: 126581

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

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: Biber
Biber 06.10.2009 um 20:40:43 Uhr
Goto Top
Moin bodyparts,

drei Rückfragen.

1) warum postest Du diese Frage unter "Tools & Utilities?

2) Verbietet dir deine Religion das Verwenden von Codetags? Soll ich mal koschere besorgen?

3) Wieso fackelst du das Ganze nicht mit einem Oneliner vom CMD-Prompt aus ab?
@for /d %i in (X:\Daten\*) do @Findstr /i  /C:"Dein Suchwert" %i\Datei_info.*>nul && @echo %i  

Grüße
Biber
Mitglied: bodyparts
bodyparts 07.10.2009 um 09:13:36 Uhr
Goto Top
Moin Biber....

zu 1. darfst es gerne verschieben
zu 2. ich glaube nicht, gerne darfst du mir die Codetags erklären bzw eine Link senden
zu 3. würde ich gerne, evtl denke ich zu umständlich

beim testen blickt die batch einmal kurz.... selbst eine Pause stop diese nicht.... werden Unterordner berüchsichtigt? Es brauchen nur *.txt Dateien durchsucht werden.

meine Änderungen...

@for /d %i in (C:\Daten\*) do @findstr /i /C:"HAUS C" %i\Daten_info.*>nul && @echo %i

pause

sorry noch ohne "Tags"

gruß
Mitglied: Biber
Biber 07.10.2009 um 12:07:55 Uhr
Goto Top
Moin bodyparts,

Zitat von @bodyparts:
Moin Biber....

zu 1. darfst es gerne verschieben
DONE.

zu 2. ich glaube nicht, gerne darfst du mir die Codetags erklären bzw eine Link senden
Wenn du einen Beitrag/einen Kommentar schreibst, dann siehst du oberhalb des texteingabefensters einen Link namens "Formatierungshilfe". Wenn du dort klickst, geht ein zusätzliches Popup-Fensterchen auf, in dem u.a. die beschrieben wird.
Wenn Du Programmcode, z.B. einen Batchschnipsel mit Zeilennummern und ansonsten so, wie er per Copy&Paste hier ankommt posten willst, dann schreibe vor den Quellcode ein "< code >" und nach der letzten Quellcodezeile ein ">/ code >" jeweils ohne Anführungszeichen und Leerzeichen.

zu 3. würde ich gerne, evtl denke ich zu umständlich
Jein... ich würde eher sagen, wenn du von "übernommenem" Sourcecode ausgehst und den versuchst so hinzubiegen, dass er bei dir passt, dann besteht immer die Gefahr, das es viel umwegiger wird, als wenn du den direkten Weg gehst (=" deine eigene Lösungsstrategie entwickelst")

beim testen blickt die batch einmal kurz.... selbst eine Pause stop diese nicht....
Weil es keine Batch-Datei ist, sondern nur eine Zeile, die du direkt vom CMD-Prompt abfeuern solltest.
Bitte öffne dir ein CMD-Fenster ("Start"->"Ausführen"->cmd [ENTER].

Später, wenn es funktioniert, kannst du es als batchdatei speichern und dazu alle einfachen %-zeichen (%i, %j...) in doppelte %-Zeichen ändern (%%i, %%j..).
Später!

werden Unterordner berüchsichtigt?
Ja, aber nur (wie in bastlas Vorlage) EINE Ebene unterhalb des Startverzeichnisses C:\Daten.
Es brauchen nur *.txt Dateien durchsucht werden.
Okay, das war Tipp-Faulheit von mir, dann statt
@for /d %i in (C:\Daten\*) do @Findstr /i /C:"HAUS C" %i\Daten_info.*>nul && @echo %i  

jetzt neu.
<code type>@for /d %i in (C:\Daten\*) do @findstr /i /C:"HAUS C" %i\Daten_info.txt>nul && @echo %i


Grüße
Biber
Mitglied: bodyparts
bodyparts 07.10.2009 um 12:24:00 Uhr
Goto Top
okay... danke erstmal...

ich habe mich schon über die %i gewundert, warum mal 1mal bzw dann wieder 2mal. Warum ist das so, wenn ich fragen darf?

dirket in der cmd Box sieht es gut aus.... könntes du die Ordner noch abfangen in dem keine Datei ist?

gruß
Mitglied: Biber
Biber 07.10.2009 um 12:43:59 Uhr
Goto Top
Moin bodyparts,

zu deiner ersten Frage (warum %i am CMD-Prompt und %%i im Batchfile):

Die CMD.exe, die "Windows-Shell" kann
  • entweder interaktiv von der so genannten "Eingabeaufforderung" genutzt werden, jeweils eine Befehlszeile gefolgt von ENTER, dann die Ausführung
  • oder im Batchmodus, mehrere Befehlszeilen nacheinander ohne Benutzerinteraktion.

Im beiden Modi sind jeweils einige Befehle des gesamten Befehlssatzes wirkungslos (z.B goto am CMD-Prompt); ein weiterer Unterschied ist die Schreibweise der dynamischen Variablen (== fie Laufvariablen der FOR-Anweisungen). Nimm es einfach als gatesgegeben hin.

Zweite Frage, Ordner ignorieren, die keine Datei dieses Namens enthalten
@for /d %i in (C:\Daten\*) do @Findstr /i /C:"HAUS C" %i\Daten_info.txt>nul 2>nul && @echo %i  

Grüße
Biber
Mitglied: bodyparts
bodyparts 07.10.2009 um 13:21:39 Uhr
Goto Top
Hallo Biber,

in der Shell sieht es gut aus!

Jetzt in einer Batch mit Eingabe des suchwerts und Ausgabe in eine Datei die den Namen des Suchwertes enthält, so der Ursprungsgedanke....

set /P suche=Wert eingeben:


@for /d %%i in (C:\Daten\*) do @Findstr /i /C:"%suche%" %%i\Daten_info.txt>nul 2>nul && echo >> c:\Daten\%suche%.txt %%i  

kein Ergebniss...

erkennst du den Fehler?

Grüße Bodyparts
Mitglied: Biber
Biber 07.10.2009 um 13:47:36 Uhr
Goto Top
Moin bodyparts,

der Teil nach dem "&&" (==wenn was gefunden) ist noch nicht ganz richtig.

Die normale Syntax einer Echo-Umleitung ist:
ECHO text-zum-umleiten [>|>>] zieldatei
..also in Deinem Fall
... Echo %%i>>"c:\daten\%suche%.txt"

Das Ziel (c:\datan\%suche%.txt) habe ich in Anführungszeiechen gesetzt, fall der Suchstring aus mehreren Teilen besteht/ein leerzeichen einschliesst.

Grüße
Biber
Mitglied: bodyparts
bodyparts 07.10.2009 um 14:14:18 Uhr
Goto Top
Hallo Biber,

es läuft. Perfekt!

den echo Befehl kenn ich eingentlich, aber halt ein Fehler. Denn Suchstring hätte ich mir denken können, das der nicht in Anführungszeichen kommt.

Danke Dir.

Gruß Bodyparts
Mitglied: bodyparts
bodyparts 08.10.2009 um 13:46:10 Uhr
Goto Top
Hallo Biber,

ich würde gerne die Frage aus meinem letzen Posting gerne hier ansetzen, weil es eine Ergänzung der "Suche" bzw ein Listing sein soll von dem was gesucht und in die Datei geschrieben worden ist.

Die Batch läuft ja prima, jetzt möchte ich gerne den gesuchten Wert als Liste vor der neuen Abfrage in der Batch anzeigen lassen.

Also

Echo %%i>>"c:\daten\gesuchte_werte.txt"  

Dazu hast du ein Posting beantwortet.

@echo off & setlocal 
for /f "usebackq delims=" %%i in ("c:\daten\gesuchte_werte.txt") do "set A=%%i" & call :ProcessLine  
goto :eof

:ProcessLine

echo Gelesene Zeile: %A% 
::Auswertung hier 
if /i "%A%"=="Start" goto :Start   

usw

Jetzt soll in der Anzeige eine Auswahl möglich sein die dann zum Ordner springt und dort eine jpg Datei öffnet.

Ein Abfrage soll nun klären ob man zu dem Ordner wechseln möchte mit ( start explorer %ordner% )

Hoffe das es okay ist ,wenn das Posting ergänzt wird.

Die fertige Batch verwaltet Fotos und gibt nach Suchwerten dem User die Möglichkeit direkt in den Ordner zu springen.
Kann man wohl eine jpg Datei in der Batch anzeigen? Ich würde jetzt ein Tool suchen welches aus der Batch springt die Datei anzeigt und wenn nicht zb ein "j" für ja gedrückt wird wieder in die Abfrage geht.

gruß bodyparts