Jump to content

Schleife variablen Problem


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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?

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...