Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per Batch Textfragmente in Gänsefüßchen Stellen

Frage Entwicklung Batch & Shell

Mitglied: Nuker5

Nuker5 (Level 1) - Jetzt verbinden

25.05.2007, aktualisiert 09.06.2007, 5289 Aufrufe, 27 Kommentare

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
27 Antworten
Mitglied: AxelHahn
25.05.2007 um 18:16 Uhr
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.

01.
@echo off 
02.
set in=textfile.txt 
03.
set out=textfile_out.txt 
04.
 
05.
del %out% 2>nul 
06.
for /F "tokens=*" %%a in ('type %in%') do call :replace "%%a" 
07.
type %out% 
08.
pause && exit 
09.
 
10.
:replace 
11.
echo %1 | findstr "=" >nul || goto echoonly 
12.
for /F "tokens=1-2 delims==" %%c in (%1) do echo %%c="%%d" >>%out% 
13.
goto end 
14.
 
15.
:echoonly 
16.
echo %~1 >>%out% 
17.
goto end 
18.
 
19.
:end
Viele Grüsse
-= Axel =-
Bitte warten ..
Mitglied: miniversum
25.05.2007 um 18:51 Uhr
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
Bitte warten ..
Mitglied: Nuker5
25.05.2007 um 21:05 Uhr
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.
Bitte warten ..
Mitglied: miniversum
26.05.2007 um 11:15 Uhr
Hab gerade die von mir gepostete (vorher ungetestete) batch getestet.
01.
@echo off 
02.
for /F "tokens=1-3 delims=.=" %%a in ('type "dateiohne.txt"') do ( 
03.
if "%%a" equ "Sortierung" ( 
04.
echo %%a.%%b="%%c">>dateimit.txt 
05.
) else ( 
06.
echo %%a%%b%%c>>dateimit.txt 
07.
08.
)
Da da allerdings alles verändert wird konnte ich bei mir nicht feststellen.
meine Datei"dateiohne.txt" sieht so aus:
01.
anderererText 
02.
Sortierung.Fix1=zuersetzenderText 
03.
Sortierung.Fix2=zuersetzenderText 
04.
Sortierung.Default1=zuersetzenderText 
05.
Sortierung.Default2=zuersetzenderText 
06.
Sortierung.Default3=zuersetzenderText 
07.
anderererText
Und die erzeugte Datei "dateimit.txt" sieht dann so aus:
01.
anderererText 
02.
Sortierung.Fix1="zuersetzenderText" 
03.
Sortierung.Fix2="zuersetzenderText" 
04.
Sortierung.Default1="zuersetzenderText" 
05.
Sortierung.Default2="zuersetzenderText" 
06.
Sortierung.Default3="zuersetzenderText" 
07.
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:
01.
@echo off 
02.
set "verzeichnis=C:\dateien\" 
03.
for /F "delims=" %%f in ('dir /b /a-D "%verzeichnis%"') do ( 
04.
for /F "tokens=1-3 delims=.=" %%a in ('type "%verzeichnis%%%f"') do ( 
05.
if "%%a" equ "Sortierung" ( 
06.
echo %%a.%%b="%%c">>"%verzeichnis%%%~nf_neu%%~xf" 
07.
) else ( 
08.
echo %%a%%b%%c>>"%verzeichnis%%%~nf_neu%%~xf" 
09.
10.
11.
)
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
Bitte warten ..
Mitglied: miniversum
27.05.2007 um 13:26 Uhr
Nach deiner Nachricht bin ich auf folgende Batch gekommen die das tun sollte was du haben möchstest (erstmal nur für eine Datei):
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
for /F "delims=" %%l in ('type "a.lst"') do ( 
04.
set line=%%l 
05.
set line=!line:^>=^^^>! 
06.
set line=!line:^<=^^^<! 
07.
if "!line:~0,13!" equ "   Sortierung" ( 
08.
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>a_neu.lst 
09.
) else ( 
10.
echo %%l>>a_neu.lst 
11.
12.
)
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:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
set "zielverzeichnis=C:\Bearbeitete Dateien" 
04.
 
05.
for /F "delims=" %%f in ('dir /b /a-D "%quellverzeichnis%\*.lst"') do ( 
06.
 
07.
for /F "delims=" %%l in ('type "%quellverzeichnis%\%%f"') do ( 
08.
set line=%%l 
09.
set line=!line:^>=^^^>! 
10.
set line=!line:^<=^^^<! 
11.
if "!line:~0,13!" equ "   Sortierung" ( 
12.
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"%zielverzeichnis%\%%f" 
13.
) else ( 
14.
echo %%l>>"%zielverzeichnis%\%%f" 
15.
16.
)
Ich hoffe das hilft dir?

miniversum
Bitte warten ..
Mitglied: Nuker5
27.05.2007 um 21:15 Uhr
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?
Bitte warten ..
Mitglied: miniversum
28.05.2007 um 12:06 Uhr
Also ohne zu testen würd ichs dan entsprechend so umbauen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
 
04.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do ( 
05.
set "infilename=%%nxf" 
06.
set "outfilename=%%nf_neu%%xf" 
07.
set "filedir=%%dpf" 
08.
echo Datei "!filedir!!infilename!" wird verarbeitet. 
09.
 
10.
for /F "delims=" %%l in ('type "!filedir!!infilename!"') do ( 
11.
set line=%%l 
12.
set line=!line:^>=^^^>! 
13.
set line=!line:^<=^^^<! 
14.
if "!line:~0,13!" equ "   Sortierung" ( 
15.
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"!filedir!!outfilename!" 
16.
) else ( 
17.
echo %%l>>"!filedir!!outfilename!" 
18.
19.
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!" 
20.
)
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
Bitte warten ..
Mitglied: Nuker5
29.05.2007 um 14:34 Uhr
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?
Bitte warten ..
Mitglied: miniversum
29.05.2007 um 16:25 Uhr
ok jetzt auch die getestete Version die bei mir Funktioniert.
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
 
04.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (  
05.
set "infilename=%%~nxf" 
06.
set "outfilename=%%~nf_neu%%~xf" 
07.
set "filedir=%%~dpf" 
08.
echo Datei "!filedir!!infilename!" wird verarbeitet. 
09.
 
10.
for /F "delims=" %%l in ('type "!filedir!!infilename!"') do ( 
11.
set line=%%l 
12.
set line=!line:^>=^^^>! 
13.
set line=!line:^<=^^^<! 
14.
if "!line:~0,13!" equ "   Sortierung" ( 
15.
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%c">>"!filedir!!outfilename!" 
16.
) else ( 
17.
echo %%l>>"!filedir!!outfilename!" 
18.
19.
20.
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!" 
21.
)
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
Bitte warten ..
Mitglied: Nuker5
30.05.2007 um 17:01 Uhr
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
Bitte warten ..
Mitglied: Nuker5
31.05.2007 um 16:19 Uhr
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
Bitte warten ..
Mitglied: miniversum
31.05.2007 um 19:38 Uhr
Sorry. Da das Forum heute morgen nicht ging antworte ich erst jetzt.
zu 2.:
Versuchs mal so:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
 
04.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (  
05.
set "infilename=%%~nxf" 
06.
set "outfilename=%%~nf_neu%%~xf" 
07.
set "filedir=%%~dpf" 
08.
echo Datei "!filedir!!infilename!" wird verarbeitet. 
09.
 
10.
for /F "delims=" %%l in ('type "!filedir!!infilename!"') do ( 
11.
set line=%%l 
12.
set line=!line:^>=^^^>! 
13.
set line=!line:^<=^^^<! 
14.
if "!line:~0,13!" equ "   Sortierung" ( 
15.
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
16.
) else ( 
17.
if "!line:~0,9!" equ <b>"   Sonder"</b> ( 
18.
for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
19.
) else ( 
20.
echo %%l>>"!filedir!!outfilename!" 
21.
22.
23.
24.
REM move /y "!filedir!!outfilename!" "!filedir!!infilename!" 
25.
)
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
Bitte warten ..
Mitglied: Biber
31.05.2007 um 20:03 Uhr
Moin Nuker5 und miniversum,

bis bastla kommt, versuchts mal hiermit:
01.
::----------snipp DoGoosefeet.bat 
02.
@echo off & setlocal  
03.
:: ...!!!! hier anpassen %quellverzeichnis% und die Extension .lst  
04.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
05.
set "quellverzeichnis=E:\Administrator" 
06.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do Call :ProcessAFile "%%f" 
07.
Goto :eof 
08.
~~~~~~~ 
09.
:ProcessAFile Param1=FQ-Dateiname 
10.
Set "out=%~dpn1.tmp" 
11.
echo.>%out% 
12.
echo ~~~~~~~~~ Datei "%~1" wird verarbeitet. 
13.
for /f "delims=: tokens=1,*" %%i in ('findstr /n $ "%~1"') do call :ProcessALine "%%i" "%%j" 
14.
echo [hier könnte ausgeführt werden] move /y "%out%" "%~1" 
15.
goto :eof 
16.
~~~~~~  
17.
:ProcessALine Parameter1=Zeilennr Parameter2=Inhalt der Zeile 
18.
If "%~2" == "" ((echo.>>%out%) & goto :eof) 
19.
echo %~2|(findstr /i "^Sortierung" >nul) || ((echo %~2>>%Out%) & goto :eof) 
20.
echo %~2|findstr "="|findstr """" >nul && (echo %~2>>%Out%) && goto :eof 
21.
echo %~2|findstr "=" >nul && For /f "delims== tokens=1,*" %%i in ("%~2") do (echo %%i="%%j">>%Out%) && goto :eof   
22.
Echo ??? [%~2] 
23.
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
Bitte warten ..
Mitglied: miniversum
31.05.2007 um 20:32 Uhr
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.
Bitte warten ..
Mitglied: Nuker5
06.06.2007 um 00:50 Uhr
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 .
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
Bitte warten ..
Mitglied: miniversum
06.06.2007 um 12:07 Uhr
So hier jetzt mein Vorschlag mit der Verarbeitung von Leerzeilen nach Bibers Ansatz:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
 
04.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (  
05.
  set "infilename=%%~nxf" 
06.
  set "outfilename=%%~nf_neu%%~xf" 
07.
  set "filedir=%%~dpf" 
08.
  echo Datei "!filedir!!infilename!" wird verarbeitet. 
09.
 
10.
  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do ( 
11.
    if "%%l" equ "" ( 
12.
    echo.>>"!filedir!!outfilename!" 
13.
    ) else ( 
14.
      set line=%%l 
15.
      set line=!line:^>=^^^>! 
16.
      set line=!line:^<=^^^<! 
17.
      if "!line:~0,13!" equ "   Sortierung" ( 
18.
        for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
19.
      ) else ( 
20.
        if "!line:~0,9!" equ "   Sonder" ( 
21.
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
22.
        ) else ( 
23.
          echo %%l>>"!filedir!!outfilename!" 
24.
25.
26.
27.
28.
  REM move /y "!filedir!!outfilename!" "!filedir!!infilename!" 
29.
)
miniversum

PS: Sollte laufen solange keine ! enthalten sind.
Bitte warten ..
Mitglied: miniversum
06.06.2007 um 13:33 Uhr
Ok her jetzt mit etwas mehr Zeit.
Also dies hier sollte alles mit Leerzeilen und auch enthaltene ! verarbeiten.
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
 
04.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do call ProzFile "%%~dpnxf" "%%~dpnf_neu%%~xf" 
05.
goto:eof 
06.
 
07.
:ProzFile 
08.
  echo Datei "%~1" wird verarbeitet. 
09.
  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "%~1"') do call ProzLine "%%l" "%~2" 
10.
  REM move /y "%~2" "%~1" 
11.
goto:eof 
12.
 
13.
:ProzLine 
14.
  if %1 equ "" ( 
15.
    echo.>>"%~2" 
16.
  ) else ( 
17.
    set line=%1 
18.
    set line=%line:1,-1% 
19.
    set line=%line:^>=^^^>% 
20.
    set line=%line:^<=^^^<% 
21.
    if "%line:~0,13%" equ "   Sortierung" ( 
22.
      for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"%~2" 
23.
    ) else ( 
24.
      if "%line:~0,9%" equ "   Sonder" ( 
25.
        for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"%~2" 
26.
      ) else ( 
27.
        echo %line%>>"%~2" 
28.
29.
30.
31.
goto:eof
miniversum
Bitte warten ..
Mitglied: Nuker5
06.06.2007 um 14:01 Uhr
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
Bitte warten ..
Mitglied: Biber
06.06.2007 um 14:24 Uhr
Hmm,
mein BSM (bio-optical scanning module sacht:
Streiche: do call ProzLine
Setze: do call :ProzLine

Gruss Biber
Bitte warten ..
Mitglied: miniversum
06.06.2007 um 14:46 Uhr
Also habs grade nochmal ausprobiert (weil ich die andern ja ohne zu testen geschrieben hab).
Mein erstes sollte gehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
 
04.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (  
05.
  set "infilename=%%~nxf" 
06.
  set "outfilename=%%~nf_neu%%~xf" 
07.
  set "filedir=%%~dpf" 
08.
  echo Datei "!filedir!!infilename!" wird verarbeitet. 
09.
 
10.
  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do ( 
11.
    if "%%l" equ "" ( 
12.
    echo.>>"!filedir!!outfilename!" 
13.
    ) else ( 
14.
      set line=%%l 
15.
      set line=!line:^>=^^^>! 
16.
      set line=!line:^<=^^^<! 
17.
      if "!line:~0,13!" equ "   Sortierung" ( 
18.
        for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
19.
      ) else ( 
20.
        if "!line:~0,9!" equ "   Sonder" ( 
21.
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
22.
        ) else ( 
23.
          echo %%l>>"!filedir!!outfilename!" 
24.
25.
26.
27.
28.
  REM move /y "!filedir!!outfilename!" "!filedir!!infilename!" 
29.
)
Das läuft bei mir Fehlerfrei durch.

Am andern Arbeit ich noch.
miniversum
Bitte warten ..
Mitglied: miniversum
06.06.2007 um 15:18 Uhr
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
Bitte warten ..
Mitglied: Nuker5
06.06.2007 um 16:31 Uhr
Das heißt also, die Version, die die Leerzeilen nicht berücksichtigt?
Bitte warten ..
Mitglied: miniversum
06.06.2007 um 16:56 Uhr
Nein diese hier:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
 
04.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (  
05.
  set "infilename=%%~nxf" 
06.
  set "outfilename=%%~nf_neu%%~xf" 
07.
  set "filedir=%%~dpf" 
08.
  echo Datei "!filedir!!infilename!" wird verarbeitet. 
09.
 
10.
  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do ( 
11.
    if "%%l" equ "" ( 
12.
    echo.>>"!filedir!!outfilename!" 
13.
    ) else ( 
14.
      set line=%%l 
15.
      set line=!line:^>=^^^>! 
16.
      set line=!line:^<=^^^<! 
17.
      if "!line:~0,13!" equ "   Sortierung" ( 
18.
        for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
19.
      ) else ( 
20.
        if "!line:~0,9!" equ "   Sonder" ( 
21.
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
22.
        ) else ( 
23.
          echo %%l>>"!filedir!!outfilename!" 
24.
25.
26.
27.
28.
  REM move /y "!filedir!!outfilename!" "!filedir!!infilename!" 
29.
)
Es werden auch Leerzeilen berücksichtigt.

miniversum
Bitte warten ..
Mitglied: Nuker5
07.06.2007 um 20:52 Uhr
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
Bitte warten ..
Mitglied: miniversum
08.06.2007 um 14:01 Uhr
Hab sie gerade nochmal überarbeitet.
Schau mal obs so funktioniert wie soll:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "quellverzeichnis=C:\Unbearbeitete Dateien" 
03.
 
04.
for /F "delims=" %%f in ('dir /s /b /a-D "%quellverzeichnis%\*.lst"') do (  
05.
  set "infilename=%%~nxf" 
06.
  set "outfilename=%%~nf_neu%%~xf" 
07.
  set "filedir=%%~dpf" 
08.
  echo Datei "!filedir!!infilename!" wird verarbeitet. 
09.
 
10.
  for /F "tokens=1,* delims=:" %%k in ('findstr /n $ "!filedir!!infilename!"') do ( 
11.
    set "line=%%l" 
12.
 
13.
    if "!line!" equ "" ( 
14.
      echo.>>"!filedir!!outfilename!" 
15.
    ) else ( 
16.
      set line=!line:^>=^^^>! 
17.
      set line=!line:^<=^^^<! 
18.
      set cline=!line: =! 
19.
      set cline=!cline:	=! & REM hier ein Tabulator, keine Leerzeichen! 
20.
 
21.
      if /i "!cline:~0,10!" equ "Sortierung" ( 
22.
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
23.
      ) else ( 
24.
        if /i "!cline:~0,6!" equ "Sonder" ( 
25.
          for /F "tokens=1,2* delims=.=" %%a in ('echo !line!') do echo %%a.%%b="%%~c">>"!filedir!!outfilename!" 
26.
        ) else ( 
27.
          echo %%l>>"!filedir!!outfilename!" 
28.
29.
30.
31.
32.
  REM move /y "!filedir!!outfilename!" "!filedir!!infilename!" 
33.
)
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
Bitte warten ..
Mitglied: Nuker5
09.06.2007 um 14:03 Uhr
Super dankeschön. Funktioniert jetzt komplett.
Danke danke.
Damit erledigt.
Bitte warten ..
Mitglied: miniversum
09.06.2007 um 14:59 Uhr
Dann sit gut. hat mich jetzt doch der Ehrgeiz gepackt das hinzubekommen.

miniversum
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Informationsdienste
gelöst Dienstplan als ics bzw. ical-Datei zur Verfügung stellen (7)

Frage von FreshRawrr zum Thema Informationsdienste ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...