Braintee 10 Geschrieben 30. November 2012 Melden Teilen Geschrieben 30. November 2012 Hallo zusammen, ich habe folgende Schleife in einem Batch File. Die folgenden 2 Zeilen durchsuchen jede Textdatei die in einem Verzeichnis sind und speichern den 6 Token in die aktuelle Datei welche gerade bearbeitet wird. Danach wird der ausgelesene Token in die Variable c gespeichert. for %%i in (%Quellverzeichnis%\%Quelldatei1%) do (for /F "Tokens=6" %%a in (%%~ni.log) do (for %%i in (%%a) do (set c=!c! %%a))) Alle ausgelesenen sechsten Token stehen jetzt in einer Variable c und sollen jetzt jeweils um die letzten 6 Stellen gekürzt werden. rem echo %c% set newc="" for %%i in (%c%) do (set newc=%c:~-6%) Jetzt ist es leider so, das er nur die letzte variable innerhalb von c in newc speichert und nicht alle die er vorher schon gefunden hat. Wie schaffe ich es, das er jede extra gespeicherte variable in c auch für newc übernimmt ? Hier nochmal das ganze Script. SETLOCAL ENABLEDELAYEDEXPANSION Setlocal enableextensions set "Quellverzeichnis=c:\install\quelle" set "Quelle=c:\install\quelle\*.log set "Quelldatei=*.pdf" set "Quelldatei1=*.log" set "Quelldatei2=*.temp" set "suchstring=BW-A" set "suchstring1=Ort:" rem set "c=0" for %%i in (%Quellverzeichnis%\%Quelldatei%) do (C:\install\ptcmd.exe %%i -B1 -E1) for %%i in (%Quellverzeichnis%\%Quelldatei%) do (findstr "%suchstring%" "%Quellverzeichnis%\%%~ni.txt">>%Quellverzeichnis%\%%~ni.log) cd %Quellverzeichnis% for %%i in (%Quellverzeichnis%\%Quelldatei1%) do (for /F "Tokens=6" %%a in (%%~ni.log) do (for %%i in (%%a) do (set c=!c! %%a))) rem echo %c% set newc="" for %%i in (%c%) do (set newc=%c:~-6%) echo %newc% pause Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 30. November 2012 Melden Teilen Geschrieben 30. November 2012 Moin Stammen die sechs Token denn aus einer Zeile der durchsuchten Datei oder aus aufeianderfolgenden sechs Zeilen? Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 30. November 2012 Autor Melden Teilen Geschrieben 30. November 2012 Hallo lefg, Stammen die sechs Token denn aus einer Zeile der durchsuchten Datei oder aus aufeianderfolgenden sechs Zeilen? Es sind z.B. 6 Textdateien und aus jeder von diesen Dateien wird der 6te Token in der ersten Zeile ausgelesen. Gruß Braintee Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 30. November 2012 Melden Teilen Geschrieben 30. November 2012 Ob ich es jetzt verstanden habe? Es werden nacheinander sechs Dateien gelesen? Aus jeder Datei soll das sechste Token (der Zeile, nur eine Zeile?) weiterverarbeitet (gekürzt und gespeichert) werden? Die Frage könnte sein, wann weiterverarbeitet? Eine Möglichkeit wäre, zur Laufzeit, kürzen und wieder einer Datei speichern, eine andere Möglichkeit, indizierte Variable erzeugen, c0, c1, ..... , eine Zählschleife mit for /l oder set /a einzubauen. Ob set /a funktioniert? Ich zöge wohl einen Verarbeitung zur Laufzeit vor; natürlich kommt die Frage, was wird mit den Ergebnissen gemacht? Also, die Schleifen werden für jede Datei neu gestartet, auch die Zählschleife, des halb wird das mit dem Indizieren so wohl nichts. Man müsste wohl eine Verarbeitung zur Laufzeit vornehmen. Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 1. Dezember 2012 Autor Melden Teilen Geschrieben 1. Dezember 2012 Hallo lefg, also im Grunde möchte ich folgendes. Es liegen Anzahl x PDF Dateien in einem Verzeichnis, diese werden in Txt Files umgewandelt. Jetzt wird wieder jede Textdatei nach dem Suchstring untersucht, extrahiert und in eine Extra Datei geschrieben. Diese Datei wird dann wieder durchsucht und in der erste Zeile wird das sechste Token extrahiert und soll anschließend gekürzt werden. Nun sollen die jeweils gekürzten Token als neuer Dateiname verwendet werden. Also, die Schleifen werden für jede Datei neu gestartet, auch die Zählschleife, des halb wird das mit dem Indizieren so wohl nichts. Man müsste wohl eine Verarbeitung zur Laufzeit vornehmen. Und zur Laufzeit habe ich es bisher noch nicht hinbekommen. Die Problematik ist, das er immer nur die letzte Datei nimmt und nicht jede Datei einzeln durchgeht. Vielleicht ist Powershell auch besser geeignet aber da kenne ich mich zuwenig mit der Syntax aus. Gruß Braintee Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 1. Dezember 2012 Melden Teilen Geschrieben 1. Dezember 2012 Hallo Baintee, wir können das Gesamte also in mehrere Schritte gliedern: 1. PDF 2 TXT 2. Durchsuchen der jeder TXT einzeln und das jeweilige Ergebnis in eine Extra.txt schreiben, 1Extra.txt, 2Extra.txt,..... 3. Aus jeder Extra.txt das 6.Token in in eine Variable, kürzen und dann weiter verwenden zum (Um)Benennen einer Datei. Wie beurteilst Du den Vorschlag? Wie sieht deine Ausgangslage aus? Wie ist die Struktur der umgewandelten Textdateien, was steht darin, was soll gesucht werden? Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 3. Dezember 2012 Autor Melden Teilen Geschrieben 3. Dezember 2012 Hi lefg, wir können das Gesamte also in mehrere Schritte gliedern: 1. PDF 2 TXT 2. Durchsuchen der jeder TXT einzeln und das jeweilige Ergebnis in eine Extra.txt schreiben, 1Extra.txt, 2Extra.txt,..... 3. Aus jeder Extra.txt das 6.Token in in eine Variable, kürzen und dann weiter verwenden zum (Um)Benennen einer Datei. Genau so bin ich auch vorgegangen. Bei Schritt 3 scheitere ich aber durch die oben angesprochenen Probleme. Du kannst Dir im folgenden mal das gesamte Bachtfile anschauen. PDF 2 txt verwende ich zwar nicht aber ein ähnliches Tool was sowas auch macht. SETLOCAL ENABLEDELAYEDEXPANSION Setlocal enableextensions set "Quellverzeichnis=c:\install\quelle" set "Quelle=c:\install\quelle\*.log set "Quelldatei=*.pdf" set "Quelldatei1=*.log" set "Quelldatei2=*.temp" set "suchstring=BW-A" set "suchstring1=Ort:" rem set "c=0" set newc="" rem Schritt 1 for %%i in (%Quellverzeichnis%\%Quelldatei%) do (C:\install\ptcmd.exe %%i -B1 -E1) rem Schritt 2 for %%i in (%Quellverzeichnis%\%Quelldatei%) do (findstr "%suchstring%" "%Quellverzeichnis%\%%~ni.txt">>%Quellverzeichnis%\%%~ni.log) cd %Quellverzeichnis% for %%i in (%Quellverzeichnis%\%Quelldatei1%) do (for /F "Tokens=6" %%a in (%%~ni.log) do (for %%i in (%%a) do (set c=!c! %%a))) rem Hier kannst Du sehen das jedes 6 Token jeder Datei in Variable C rem drinsteht echo %c% for %%i in (%c%) do (set newc=%c:~-6%) rem Hier jetzt die Ausgabe von newc und dort passt es einfach nicht. echo %newc% Gruß Braintee Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 3. Dezember 2012 Melden Teilen Geschrieben 3. Dezember 2012 Moin Braintee Um wirklich helfen zu können, müsste ich das nachstellen können, auch den Ablauf beobachten. So kann ich nur vermuten, die Inhalte, Werte des Token werden im Ablauf nacheinander angezeigt, am Ende des Schleifebablaufes ist aber nur noch der Wert des zuletzt erfassten Tokens noch vorhanden. Jedenfalls erscheint mir das nach meiner Kenntnis des verhaltens der FOR-Schleife so schlüssig. Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 3. Dezember 2012 Autor Melden Teilen Geschrieben 3. Dezember 2012 Hi lefg, Um wirklich helfen zu können, müsste ich das nachstellen können, auch den Ablauf beobachten. So kann ich nur vermuten, die Inhalte, Werte des Token werden im Ablauf nacheinander angezeigt, am Ende des Schleifebablaufes ist aber nur noch der Wert des zuletzt erfassten Tokens noch vorhanden. Jedenfalls erscheint mir das nach meiner Kenntnis des verhaltens der FOR-Schleife so schlüssig. Genau so ist es und das ist auch mein Problem. Ich weiß das man es leichter testen kann wenn Du es selbst nachstellst aber das Kernproblem hast Du ja erkannt und die Frage ist jetzt nur hast Du noch eine Idee wie es anders umsetzen kann oder soll ich was ganz anderes nehmen ? Gruß Braintee Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 3. Dezember 2012 Melden Teilen Geschrieben 3. Dezember 2012 Nun, kann es sein, Du willst, kannst, darfst nicht die Datenstruktur der Datei preisgeben? Zum Debugging muss ich die Struktur kennen, auch Daten haben, etwas zum Beobachten, sehen, was das Programm damit macht. Es wäre sinnlos, mit einer langen Stange im Nebel zu stochern, in der Hoffnung, einen Schalter zun finden, wobei man nicht weiß, ob es überhaupt einen Schalter gibt und falls doch, was dieser bewirkte. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.