nuker5
Goto Top

Per Batch Textfragmente in Gänsefüßchen Stellen

Hallo miteinander,

dieses Forum ist ja echt Gold wert. Vielleicht könnte mir jemand hier weiterhelfen.
Ich habe in Textdateien Fragmente folgenden Formats stehen

Schnipp
anderererText
Sortierung.Fix1=zuersetzenderText
Sortierung.Fix2=zuersetzenderText
Sortierung.Default1=zuersetzenderText
Sortierung.Default2=zuersetzenderText
Sortierung.Default3=zuersetzenderText
anderererText
Schnapp

und der soll geändert werden in

Schnipp
anderererText
Sortierung.Fix1="zuersetzenderText"
Sortierung.Fix2="zuersetzenderText"
Sortierung.Default1="zuersetzenderText"
Sortierung.Default2="zuersetzenderText"
Sortierung.Default3="zuersetzenderText"
anderererText
Schnapp

also jeweils nur die Gänsefüßchen hinzufügt werden.
Gibt es eine Möglichkeit, das über Batch zu realisieren?
Die Zahlen hinter Fix und Default können auch variieren, sind also aufsteigend und können pro Textdatei unterschiedlich ein in der Anzahl (also mal 1-3 und mal 1-9 usw.)

Man müsste also etwa so suchen
Suche Sortierung.*=Textbiszeilenende ersezte Textbiszeilenende mit "Textbiszeilenende"

Sowas geht doch sicherlich nur über RegExpressions. Gibt es eventuell ein Fremdprogramm, dass sowas kann.

Für Hilfe wäre ich echt verbunden.

Vielen Dank

Marcel

Content-Key: 59838

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: AxelHahn
AxelHahn 25.05.2007 um 18:16:36 Uhr
Goto Top
Hi Marcel,

mit regex ersetzen ... ginge mit einer sed-Protierung für Windows.
Mit Batch kannst du dein Textfile (Variable IN) zeilenweise lesen und dann die Zeile auseinandernehmen. Der Text vor dem = wird ausgegeben, dann das = selbst und dahinter der Text nach dem Gleichheitszeichen in Anführungszeichen.
Das Ganze ist vielleicht optimierungsbedürftig - aber so geht es und ist noch lesbar.

@echo off
set in=textfile.txt
set out=textfile_out.txt

del %out% 2>nul
for /F "tokens=*" %%a in ('type %in%') do call :replace "%%a"  
type %out%
pause && exit

:replace
echo %1 | findstr "=" >nul || goto echoonly  
for /F "tokens=1-2 delims==" %%c in (%1) do echo %%c="%%d" >>%out%  
goto end

:echoonly
echo %~1 >>%out%
goto end

:end

Viele Grüsse
-= Axel =-
Mitglied: miniversum
miniversum 25.05.2007 um 18:51:29 Uhr
Goto Top
Jetzt mal ungetestet hät ichs so versucht:
@echo off
for /F "tokens=1-3 delims=.=" %%a in ('type "dateiohne.txt"') do (
if "%%a" equ "Sortierung" (
echo %%a.%%b="%%c">>dateimit.txt
) else (
echo %%a%%b%%c>>dateimit.txt
)
)

miniversum
Mitglied: Nuker5
Nuker5 25.05.2007 um 21:05:35 Uhr
Goto Top
Der Vorschlag von AxelHahn geht schon etwas in die Richtung.
Allerdings werden hier alles Zeilen, wo ein = vorkommt mit Gänsefüßchen versehen.
Und es wäre schön, wenn das nicht nur für eine Datei sondern auch für 100 Dateien ginge.
Und es werden Leerzeichen nicht berücksichtigt.
Aus z.B.
{
wird dann
{

Der Vorschlag von miniversum führt die Dateien sozusagen in einen nicht verwendbaren Zustand da hier kein Stein auf anderen gelassen wird. Die Datei ist nicht mehr zu erkennen.
Es sind alle Gleichheitszeichen und fast alle Gänsefüßchen beschnitten...

Wäre toll, wenn ihr mir dabei noch helfen könntet.

Danke.
Mitglied: miniversum
miniversum 26.05.2007 um 11:15:57 Uhr
Goto Top
Hab gerade die von mir gepostete (vorher ungetestete) batch getestet.
@echo off
for /F "tokens=1-3 delims=.=" %%a in ('type "dateiohne.txt"') do (  
if "%%a" equ "Sortierung" (  
echo %%a.%%b="%%c">>dateimit.txt  
) else (
echo %%a%%b%%c>>dateimit.txt
)
)

Da da allerdings alles verändert wird konnte ich bei mir nicht feststellen.
meine Datei"dateiohne.txt" sieht so aus:
anderererText
Sortierung.Fix1=zuersetzenderText
Sortierung.Fix2=zuersetzenderText
Sortierung.Default1=zuersetzenderText
Sortierung.Default2=zuersetzenderText
Sortierung.Default3=zuersetzenderText
anderererText
Und die erzeugte Datei "dateimit.txt" sieht dann so aus:
anderererText
Sortierung.Fix1="zuersetzenderText"  
Sortierung.Fix2="zuersetzenderText"  
Sortierung.Default1="zuersetzenderText"  
Sortierung.Default2="zuersetzenderText"  
Sortierung.Default3="zuersetzenderText"  
anderererText

Ich kann also deinen Beschriebenen Effekt nicht nachvollziehen. Poste doch mal wie bei dir das Ergebnis aussieht (auszugsweise)?

Um mehrere Dateien zu verarbeiten kansnt du meine Batch folgendermasen umbauen:
@echo off
set "verzeichnis=C:\dateien\"  
for /F "delims=" %%f in ('dir /b /a-D "%verzeichnis%"') do (  
for /F "tokens=1-3 delims=.=" %%a in ('type "%verzeichnis%%%f"') do (  
if "%%a" equ "Sortierung" (  
echo %%a.%%b="%%c">>"%verzeichnis%%%~nf_neu%%~xf"  
) else (
echo %%a%%b%%c>>"%verzeichnis%%%~nf_neu%%~xf"  
)
)
)

So wird erstmal nur von jeder Datei eine Kopie angelegt mit der Erweiterung "_neu". Wenn dann alles läuft wie es soll kannst du dann die Dateien auch gleich wie die alten Dateien umbenennen lassen indem du vor der letzten ) noch folgende Zeilen einfügst:
del "%verzeichnis%%%f"
rename "%verzeichnis%%%~nf_neu%%~xf" "%verzeichnis%%%f"

miniversum
Mitglied: miniversum
miniversum 27.05.2007 um 13:26:23 Uhr
Goto Top
Nach deiner Nachricht bin ich auf folgende Batch gekommen die das tun sollte was du haben möchstest (erstmal nur für eine Datei):
@echo off & setlocal enabledelayedexpansion

for /F "delims=" %%l in ('type "a.lst"') do (  
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ "   Sortierung" (  
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>a_neu.lst  
) else (
echo %%l>>a_neu.lst
)
)

Willst du das ganze für mehrere Dateien haben (die alle im Verzeichnis C:\quelldateien\ ) liegen und die Endung .lst haben dann kannt du das so machen:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  
set "zielverzeichnis=C:\Bearbeitete Dateien"  

for /F "delims=" %%f in ('dir /b /a-D "%quellverzeichnis%\*.lst"') do (  

for /F "delims=" %%l in ('type "%quellverzeichnis%\%%f"') do (  
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ "   Sortierung" (  
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"%zielverzeichnis%\%%f"  
) else (
echo %%l>>"%zielverzeichnis%\%%f"  
)
)

Ich hoffe das hilft dir?

miniversum
Mitglied: Nuker5
Nuker5 27.05.2007 um 21:15:37 Uhr
Goto Top
Total genial. Funktioniert erstmal soweit.
Die Batch mit den Verzeichnissen würde ich gern noch so anpassen, dass er das auch in Unterverzeichnissen macht, was sich ja mit dem zusätzlichen Parameter /s beim Befehl DIR realisieren ließe. Allerdings sollen die Dateien nicht in ein anderes Verzeichnis geschrieben werden sondern in jedem Originalverzeichnis soll zuerst eine Kopie landen, was ja mit dem XCOPY-Befehl problemlos möglich ist, und dann sollen die Originaldateien mit den Gänsefüßchen ersetzt werden.
Das bekomme ich über diese Batch noch nicht hin, denn über Pipe wird ja eine _Neu angehängt.
Bin ich da richtig in der Annahme, dass da mit einem move alles was *_neu.lst *.lst gemovt werden muss?
Mitglied: miniversum
miniversum 28.05.2007 um 12:06:19 Uhr
Goto Top
Also ohne zu testen würd ichs dan entsprechend so umbauen:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  

for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (  
set "infilename=%%nxf"  
set "outfilename=%%nf_neu%%xf"  
set "filedir=%%dpf"  
echo Datei "!filedir!!infilename!" wird verarbeitet.  

for /F "delims=" %%l in ('type "!filedir!!infilename!"') do (  
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ "   Sortierung" (  
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"!filedir!!outfilename!"  
) else (
echo %%l>>"!filedir!!outfilename!"  
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"  
)

So sollten neue Dateien erzeugt werden (Dateiname_neu.lst) die im gleichen Verzeichniss sind wie die orginaldateien. Das mit dem Dir /s ist ja auch drin. Das in quellverzeichnis angegebene Verzeichniss dient als stammverzeichniss von dem aus dieses und alle Unterverzeichnisse durchsucht werden.
Das mit dem ersetzen mit move habe ich erstmal auskommentiert. Wenn es so funktioniert kannst du ja das REM in der vorletzten Zeile rausnehmen.

miniversum
Mitglied: Nuker5
Nuker5 29.05.2007 um 14:34:43 Uhr
Goto Top
Schade. Nein funktioniert leider nicht.
Leider bekomme ich keine Fehlermeldung in der Batch und die Befehle werden anscheinend auch nicht abgearbeitet, weil er braucht einen Bruchteil einer Sekunde...
im Batchverzeichnis landet dann eine Datei mit 0 Byte namens: !

Hättest Du da noch einen Rat, miniversum?
Mitglied: miniversum
miniversum 29.05.2007 um 16:25:45 Uhr
Goto Top
ok jetzt auch die getestete Version die bei mir Funktioniert.
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  

for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (   
set "infilename=%%~nxf"  
set "outfilename=%%~nf_neu%%~xf"  
set "filedir=%%~dpf"  
echo Datei "!filedir!!infilename!" wird verarbeitet.  

for /F "delims=" %%l in ('type "!filedir!!infilename!"') do (  
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ "   Sortierung" (  
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"!filedir!!outfilename!"  
) else (
echo %%l>>"!filedir!!outfilename!"  
)
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"  
)
So werden erstmal nur die neuen Dateien erstellt.
Wird das REM in der Vorletzten zeile entfernt werden die alten Dateien gleich ersetzt.
Jetzt könnte es nurnoch Probleme mit ! innerhalb der Dateien geben???

miniversum
Mitglied: Nuker5
Nuker5 30.05.2007 um 17:01:46 Uhr
Goto Top
Ich habe leider immer noch etwas zu meckern...

1. Gibt es nicht eine Möglichkeit, dass Leerzeilen auch Leerzeilen bleiben?
2. Gibt es die Möglichkeit, dass Felder, wo schon ein Sonder....="...

steht, diese auszulassen, also alles wo ein Sonder drin enthalten ist und ="
schon drin steht nämlich dann =""...


Marcel
Mitglied: Nuker5
Nuker5 31.05.2007 um 16:19:14 Uhr
Goto Top
Kann mir hier denn jetzt niemand mehr weiterhelfen?
Wäre schön, wenn das ginge...

Vielen vielen Dank für die bisherige Hilfe.

Miniversum, hättest Du da vielleicht noch eine Idee?

Vielen Dank

Marcel
Mitglied: miniversum
miniversum 31.05.2007 um 19:38:06 Uhr
Goto Top
Sorry. Da das Forum heute morgen nicht ging antworte ich erst jetzt.
zu 2.:
Versuchs mal so:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  

for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (   
set "infilename=%%~nxf"  
set "outfilename=%%~nf_neu%%~xf"  
set "filedir=%%~dpf"  
echo Datei "!filedir!!infilename!" wird verarbeitet.  

for /F "delims=" %%l in ('type "!filedir!!infilename!"') do (  
set line=%%l
set line=!line:^>=^^^>!
set line=!line:^<=^^^<!
if "!line:~0,13!" equ "   Sortierung" (  
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
) else (
if "!line:~0,9!" equ <b>"   Sonder"</b> (  
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
) else (
echo %%l>>"!filedir!!outfilename!"  
)
)
)
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"  
)
Beim fettgedruckten mußt du mal schauen ob die Anzahl der Leerzeichen stimmt. Ich habe leider die Datei von dir gelöscht. Aber schau sie dir einfach mit einem Editor an und schau wieviele Leezeichen du dort davor hast. Soltest du Leerzeichen hinzufügen oder löschen must du auch beim, in der gleichen Zeile stehende, !line:~0,9! die 9 an die Anzahl der Zeichen dann anpassen.

zu 1.:
Das geht im Batch schlecht. In vbs würde sowas besser gehen wenn es Umbedingt erforderlich ist. In vbs kenne ich mich leider nicht aus. Da müßte dich Bastla woll einklinken dann.

miniversum
Mitglied: Biber
Biber 31.05.2007 um 20:03:52 Uhr
Goto Top
Moin Nuker5 und miniversum,

bis bastla kommt, versuchts mal hiermit:
::----------snipp DoGoosefeet.bat
@echo off & setlocal 
:: ...!!!! hier anpassen %quellverzeichnis% und die Extension .lst 
set "quellverzeichnis=C:\Unbearbeitete Dateien"  
set "quellverzeichnis=E:\Administrator"  
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do Call :ProcessAFile "%%f"  
Goto :eof
~~~~~~~
:ProcessAFile Param1=FQ-Dateiname
Set "out=%~dpn1.tmp"  
echo.>%out%
echo ~~~~~~~~~ Datei "%~1" wird verarbeitet.  
for /f "delims=: tokens=1,*" %%i in ('findstr /n $ "%~1"') do call :ProcessALine "%%i" "%%j"  
echo [hier könnte ausgeführt werden] move /y "%out%" "%~1"  
goto :eof
~~~~~~ 
:ProcessALine Parameter1=Zeilennr Parameter2=Inhalt der Zeile
If "%~2" == "" ((echo.>>%out%) & goto :eof)  
echo %~2|(findstr /i "^Sortierung" >nul) || ((echo %~2>>%Out%) & goto :eof)  
echo %~2|findstr "="|findstr """" >nul && (echo %~2>>%Out%) && goto :eof  
echo %~2|findstr "=" >nul && For /f "delims== tokens=1,*" %%i in ("%~2") do (echo %%i="%%j">>%Out%) && goto :eof    
Echo ??? [%~2]
goto :eof

Die Geschichte mit den "<" und ">" -Zeichen habe ich nicht als Anforderung gesehen.
Falls da XML-(ähnliche)-Tags in den Quelldateien sind, dann kann das mit rein (siehe miniversums Schnipsel).

Sonst bitte ich mal um eine "typische" Inputdatei, damit wir alle gegen die gleiche Anforderung vor uns hin coden...

Grüße
Biber
Grüße
Biber
Mitglied: miniversum
miniversum 31.05.2007 um 20:32:25 Uhr
Goto Top
Dein Code könnte passen. Die < und > must du Berücksichtigen. das problem hattte ich zu beginn auch.
Die datei hat nen Aufbau alla:
[blablabla]
bliblibli
blöblöblö=blublublub
Sicherung.Fix1=irgentwas
blumblumblum=bla <2>

Die Einrückungen sind tabs.

Das findstr hab ich absichtlich weggelassen weils erstens länger dauert (Die Datei hat viele Zeilen) und zweitens ich ausschliesen Wollte das hinter dem Gleichheitszichen nicht auch eine solche Zeichenkette vorkommen kann.

miniversum

PS: An den Ansatz mit dem Findstr zum erzeugen einer Datei und auslesen des Teils nach dem : hab ich nicht dran gedacht.
Mitglied: Nuker5
Nuker5 06.06.2007 um 00:50:16 Uhr
Goto Top
Also,

hallo biber und miniversum,

sorry, dass ich mich nicht gemeldet habe. Lag total flach. Aber ich kann jetzt frisch weiter mit dem nächsten Fehler face-sad.
Ich möchte Euch ja nicht nerven, aber bei diesem Advanced Batch Programming kann ich wirklich fast nur zusehen...
Also ich rufe die Batch von Biber auf, die erste Datei wird angefasst, das steht dann als erstes "Das Sprungziel eof) wurde nicht gefunden."
Dann macht er ein paar Zeilen was und geht dann mit einem Fehler raus: "]" ist syntatktisch an dieser Stelle nicht verarbeitbar. Das hatte mit miniversums Batch alles so funktioniert, bis eben auf die Leerzeile.

Vielleicht könntet Ihr mir da bitte nochmal weiterhelfen. Das wäre echt toll.

Vielen Dank.

Marcel
Mitglied: miniversum
miniversum 06.06.2007 um 12:07:34 Uhr
Goto Top
So hier jetzt mein Vorschlag mit der Verarbeitung von Leerzeilen nach Bibers Ansatz:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  

for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (   
  set "infilename=%%~nxf"  
  set "outfilename=%%~nf_neu%%~xf"  
  set "filedir=%%~dpf"  
  echo Datei "!filedir!!infilename!" wird verarbeitet.  

  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do (  
    if "%%l" equ "" (  
    echo.>>"!filedir!!outfilename!"  
    ) else (
      set line=%%l
      set line=!line:^>=^^^>!
      set line=!line:^<=^^^<!
      if "!line:~0,13!" equ "   Sortierung" (  
        for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
      ) else (
        if "!line:~0,9!" equ "   Sonder" (  
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
        ) else (
          echo %%l>>"!filedir!!outfilename!"  
        )
      )
    )
  )
  REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"  
)

miniversum

PS: Sollte laufen solange keine ! enthalten sind.
Mitglied: miniversum
miniversum 06.06.2007 um 13:33:50 Uhr
Goto Top
Ok her jetzt mit etwas mehr Zeit.
Also dies hier sollte alles mit Leerzeilen und auch enthaltene ! verarbeiten.
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  

for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do call ProzFile "%%~dpnxf" "%%~dpnf_neu%%~xf"  
goto:eof

:ProzFile
  echo Datei "%~1" wird verarbeitet.  
  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "%~1"') do call ProzLine "%%l" "%~2"  
  REM move /y "%~2" "%~1"  
goto:eof

:ProzLine
  if %1 equ "" (  
    echo.>>"%~2"  
  ) else (
    set line=%1
    set line=%line:1,-1%
    set line=%line:^>=^^^>%
    set line=%line:^<=^^^<%
    if "%line:~0,13%" equ "   Sortierung" (  
      for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"%~2"  
    ) else (
      if "%line:~0,9%" equ "   Sonder" (  
        for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"%~2"  
      ) else (
        echo %line%>>"%~2"  
      )
    )
  )
goto:eof

miniversum
Mitglied: Nuker5
Nuker5 06.06.2007 um 14:01:40 Uhr
Goto Top
Hallo Miniversum,

leider hat das noch nicht funktioniert.
ich bekomme folgende Fehlerausschriften:
Datei "c:\....\a.lst" wird verarbeitet.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.

Grüße Marcel
Mitglied: Biber
Biber 06.06.2007 um 14:24:52 Uhr
Goto Top
Hmm,
mein BSM (bio-optical scanning module sacht:
Streiche: do call ProzLine
Setze: do call :ProzLine

Gruss Biber
Mitglied: miniversum
miniversum 06.06.2007 um 14:46:48 Uhr
Goto Top
Also habs grade nochmal ausprobiert (weil ich die andern ja ohne zu testen geschrieben hab).
Mein erstes sollte gehen:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  

for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (   
  set "infilename=%%~nxf"  
  set "outfilename=%%~nf_neu%%~xf"  
  set "filedir=%%~dpf"  
  echo Datei "!filedir!!infilename!" wird verarbeitet.  

  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do (  
    if "%%l" equ "" (  
    echo.>>"!filedir!!outfilename!"  
    ) else (
      set line=%%l
      set line=!line:^>=^^^>!
      set line=!line:^<=^^^<!
      if "!line:~0,13!" equ "   Sortierung" (  
        for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
      ) else (
        if "!line:~0,9!" equ "   Sonder" (  
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
        ) else (
          echo %%l>>"!filedir!!outfilename!"  
        )
      )
    )
  )
  REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"  
)
Das läuft bei mir Fehlerfrei durch.

Am andern Arbeit ich noch.
miniversum
Mitglied: miniversum
miniversum 06.06.2007 um 15:18:48 Uhr
Goto Top
So Problem gefunden.
Der Ansatz mit den calls gehen nicht.
Der Grund liegt darin darin, dass in der Datei mehrere Zeilen vorkommen die folgende Zeichenfolge beinhalten:
W + " " +A
Dies macht beim Aufruf Probleme weil das
call ProzLine "%%l" "%~2"
nicht mehr aus zwei sondern aus drei parametern dan besteht.

Nimm einfach die Batch die ich im vorigen Posting habe. Die läuft bei mir durch ohne Probleme.

miniversum
Mitglied: Nuker5
Nuker5 06.06.2007 um 16:31:09 Uhr
Goto Top
Das heißt also, die Version, die die Leerzeilen nicht berücksichtigt?
Mitglied: miniversum
miniversum 06.06.2007 um 16:56:11 Uhr
Goto Top
Nein diese hier:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  

for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (   
  set "infilename=%%~nxf"  
  set "outfilename=%%~nf_neu%%~xf"  
  set "filedir=%%~dpf"  
  echo Datei "!filedir!!infilename!" wird verarbeitet.  

  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do (  
    if "%%l" equ "" (  
    echo.>>"!filedir!!outfilename!"  
    ) else (
      set line=%%l
      set line=!line:^>=^^^>!
      set line=!line:^<=^^^<!
      if "!line:~0,13!" equ "   Sortierung" (  
        for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
      ) else (
        if "!line:~0,9!" equ "   Sonder" (  
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
        ) else (
          echo %%l>>"!filedir!!outfilename!"  
        )
      )
    )
  )
  REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"  
)

Es werden auch Leerzeilen berücksichtigt.

miniversum
Mitglied: Nuker5
Nuker5 07.06.2007 um 20:52:00 Uhr
Goto Top
Es tut mir ja leid, aber damit habe ich eben zwei Probleme:
1. Die Leerzeilen werden mit folgendem gefüllt: ECHO ist ausgeschaltet (OFF).
2. Dort wo die Leerzeichen vor "Sortierung" abweichen wird es nicht gesetzt.

Wenn man das in der Batch-Version noch korrigieren könnte wäre das die eierlegende Wollmilchsau für mich, dann hätte ich alles war ich brauch.
Sag einfach wenn es nicht geht, dann lasse ich die Batch-Version so, die ohne Leerzeilen arbeitet und muss mit der Einschränkung mit den Leerzeichen leben.
Danke nochmal für die bisherige Hilfe.

Marcel
Mitglied: miniversum
miniversum 08.06.2007 um 14:01:08 Uhr
Goto Top
Hab sie gerade nochmal überarbeitet.
Schau mal obs so funktioniert wie soll:
@echo off & setlocal enabledelayedexpansion
set "quellverzeichnis=C:\Unbearbeitete Dateien"  

for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (   
  set "infilename=%%~nxf"  
  set "outfilename=%%~nf_neu%%~xf"  
  set "filedir=%%~dpf"  
  echo Datei "!filedir!!infilename!" wird verarbeitet.  

  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do (  
    set "line=%%l"  

    if "!line!" equ "" (  
      echo.>>"!filedir!!outfilename!"  
    ) else (
      set line=!line:^>=^^^>!
      set line=!line:^<=^^^<!
      set cline=!line: =!
      set cline=!cline:	=! & REM hier ein Tabulator, keine Leerzeichen!

      if /i "!cline:~0,10!" equ "Sortierung" (  
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
      ) else (
        if /i "!cline:~0,6!" equ "Sonder" (  
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!"  
        ) else (
          echo %%l>>"!filedir!!outfilename!"  
        )
      )
    )
  )
  REM move /y "!filedir!!outfilename!" "!filedir!!infilename!"  
)
Achte auf die Zeile in der Mitte:
set cline=!cline: =! & REM hier ein Tabulator, keine Leerzeichen!
Dort mußt zwischen dem : und dem = einen Tabulator sein. Nicht das es durchs copy und Paste verlohren geht....
Hab die mit der Datei von der ausprobiert und lief.

miniversum
Mitglied: Nuker5
Nuker5 09.06.2007 um 14:03:15 Uhr
Goto Top
Super dankeschön. Funktioniert jetzt komplett.
Danke danke.
Damit erledigt.
Mitglied: miniversum
miniversum 09.06.2007 um 14:59:21 Uhr
Goto Top
Dann sit gut. hat mich jetzt doch der Ehrgeiz gepackt das hinzubekommen.

miniversum