visser
Goto Top

Batch zum vergleichen 2er Textdateien und ändern der Ziel Textdatei etwa wie suchen und ersetzen

Ich weiss, das ich KEIN Crack auf dem Gebiet batch bin und haben ein unlösbares Problem zu bewältigen.
Vielleicht kann mir jemand helfen.

Ich habe 2 Verzechnisse, welche zum import von Dateien genutzt werden soll.

Die abgelegten dteien sind PDF und DWG.
das Problem ist, das die Dateien mit Revisionskennung kommen, welche als Information benötigt wird, aber nicht in der Importdatei vorhanden ist.

beispiel Datei:
Eintrag in Excel-liste 096008-263202.dwg
vorhandene Datei 096008-263202R01.dwg

Nun gehe ich hin und Schreibe eine Textdatei, welche die Dateinamen hält und benenne die Dateien um, damit sie gefunden werden.

Folgende Probleme habe ich:

1. Wenn eine Datei kein R enthält, wird noch einmal die Endung angefügt.
Ich hatte versucht, die Dateien ohne R vorher mit dir -*R*.* zu verschieben, hier findet das Batch keine Dateien.
2. Die Datei Rev. TXT hält die Revisionsinformationen, welche aber für den Import am besten in eine Excel Datei ohne R gesucht wird und in die nächste Zeile eingefügt wird.
Dies geht aber nur ohne manuellen Eingriff, da der Import periodisch laufen soll. Im Ernstfall sollte es auch mit einer Textdatei gehen. Auch hier muss ein text in datei a gesucht werden und Tab oder Semikolon getrennt in die Datei eingefügt werden und zwar ohne Verzeichnisname, welcher immer fest ist (c:\import1\....)
Beispiel Datensatz
Dies ist der gesuchte String
07 1175 110 001 0 07-1175-HAD-ZD-140 096008-231200 Beispieltext

Beispieltext: c:\import\096008-263202.dwg
*
@echo off
:IF
IF NOT EXIST "C:\Konvertiert\REV.txt" goto los
goto import

:los
IF EXIST c:\import\*.dwg goto list
IF EXIST c:\import\*.pdf goto list
goto warte

:warte
@echo Keine Dateien zur Verarbeitung vorhanden
@Ping 192.168.0.251 -n 20 > nul
goto los

:Import
@echo Importvorgang noch nicht abgeschlossen.
@Ping 192.168.0.251 -n 20 > nul
goto IF

:list
call c:\konvertiert\listnamemove.cmd
goto IF

*
listnamemove.cmd
*
@echo off
dir c:\import\*.dwg /s /b > c:\Konvertiert\REV.txt
dir c:\import\*.pdf /s /b >> c:\Konvertiert\REV.txt
cd c:\import
for %%f in (*.dwg;*.pdf) do @for /f "delims=R" %%n in ('echo %%~f') do move /y "%%~f" "%%n%%~xf"
dir c:\import\*.dwg /s /b > c:\Konvertiert\Dateien.txt
dir c:\import\*.pdf /s /b >> c:\Konvertiert\Dateien.txt
cd c:\Konvertiert\
for /F "delims=," %%i in (dateien.txt) do move %%i c:\Konvertiert
@echo VERARBEITUNG ABGESCHLOSSEN !

Content-Key: 100007

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: bastla
bastla 23.10.2008 um 11:19:28 Uhr
Goto Top
Hallo Visser!

Nur mal als Denkanstoß: Mit
for %%f in (*R*.dwg;*R*.pdf) do ...
solltest Du ausschließlich die Dateien mit Revisionsinfo "erwischen" können ...

Und ganz nebenbei: "move" benötigt in einem Batch kein "/y".

Grüße
bastla

P.S.: Für mehr habe ich momentan leider nicht Zeit
Mitglied: Visser
Visser 23.10.2008 um 11:45:37 Uhr
Goto Top
Danke!

Problem 1 ist schonmal gelöst !

das /Y ist wohl noch ein rest von div. tests.

Ich bin nun schon einen Schritt weiter und benutze eine csv datei.
kann mit jemand helfen, eine suche aus einer Textdatei mit Inhalt:

c:\import\096008-255201R-02.dwg
c:\import\096008-255204R-01.dwg
c:\import\096008-257100R.dwg

nach 13 stellen hinter c:\import\ als wert in csv suchen und den gesamten Text ohne c:\import\ nur an der ersten Fundstelle einfügen?
Mitglied: bastla
bastla 23.10.2008 um 20:58:03 Uhr
Goto Top
Hallo Visser!

Kannst Du bitte nochmals genau erklären, wo eingefügt werden soll?

Das Heraussuchen selbst könnte so ablaufen:
@echo off & setlocal
for /f "tokens=2* delims=\" %%i in ('findstr /c:"R" "D:\Deine.csv"') do echo %%j  
Grüße
bastla
Mitglied: Visser
Visser 24.10.2008 um 10:44:52 Uhr
Goto Top
Hallo bastla,

vielen Dank für die Antwort!

In meinem Script wird ja eine Textdatei angelegt, welche die Ursprünglichen Dateinamen beinhaltet.

C:\Konvertiert\REV.txt

Da das Importtool eine Eindeutigkeit der Dokumente voraussetzt, müssen wir die Dateien umbenennen, den Ursprünglichen Text aber als Datensatz in die Datenbank schreiben. Also habe ich eine CSV, welche die Dateinamen ohne Rev enthält und einen Dateinamen sprich :

096008-231200 096008-231200.dwg
096008-231100 096008-231100.dwg

Inhalt der Textdatei:
c:\Konvertiert\096008-254200R02.dwg
c:\Konvertiert\096008-254201R-02.dwg

Es soll nun in der REV Datei nach c:\Konvertiert\ durch Blank erstetzt werden und jeden reinen String in der Textdatei soll in der CSV gesucht werden und nur die erste Fundstelle ersetzt werden.
Der Dateiname mit Endung darf nicht umbenannt werden.

Ist vielleicht etwas schwierig. Zumindest für mich.
Dafür kann ich bei jedem Netzwerk und Windows Problem helfen.
Lieben Dank für eure Hilfe!