Batch die Inhalte von Textdateien in eine neue Textdatei schreibt und die abgearbeitete Datei löscht
Hallo Liebe Admins,
meine (noch) Unfähigkeit ne Batch zu schreiben, nervt mich schon wieder seit heute morgen, vielleicht kann und mag mir ja jemand helfen:
Ich habe hier ein Verzeichnis in welchem eine Datei, nennen wir sie mal import.txt ist, und von Zeit zu Zeit kommen andere Textdateien mit verschiedenen Namen an, die aber immer gleich aufgebaut sind. Diese nennen sich immer A12345.txt oder B12345.txt
Ziel des ganzen:
Nimm mir die Textdateien die ankommen, im Format A12345 oder B12345, kopiere mir die 1. (und einzige) Zeile raus, schmeiss diesen String in die import.txt und LÖSCHE danach die gerade verwendete Datei, bzw. kopiere Sie mir in einen Ordner "_old"
Der Dateiname ist identisch mit den ersten 8 Zeichen in der Datei + Endung.
Sprich ist in der ankommenden Textdatei folgender Text A1234567;098234;oifdfdwd;000s04 dann heist die Datei auch A1234567.txt
So, liebe Forenmitgieder, wer kann und mah mir hier helfen ??
Gruß,
Robertj
meine (noch) Unfähigkeit ne Batch zu schreiben, nervt mich schon wieder seit heute morgen, vielleicht kann und mag mir ja jemand helfen:
Ich habe hier ein Verzeichnis in welchem eine Datei, nennen wir sie mal import.txt ist, und von Zeit zu Zeit kommen andere Textdateien mit verschiedenen Namen an, die aber immer gleich aufgebaut sind. Diese nennen sich immer A12345.txt oder B12345.txt
Ziel des ganzen:
Nimm mir die Textdateien die ankommen, im Format A12345 oder B12345, kopiere mir die 1. (und einzige) Zeile raus, schmeiss diesen String in die import.txt und LÖSCHE danach die gerade verwendete Datei, bzw. kopiere Sie mir in einen Ordner "_old"
Der Dateiname ist identisch mit den ersten 8 Zeichen in der Datei + Endung.
Sprich ist in der ankommenden Textdatei folgender Text A1234567;098234;oifdfdwd;000s04 dann heist die Datei auch A1234567.txt
So, liebe Forenmitgieder, wer kann und mah mir hier helfen ??
Gruß,
Robertj
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 114311
Url: https://administrator.de/contentid/114311
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo roberth,
Wenn du schreibst immer gleich aufgebaut und der Aufbau ist in einem Beispiel 1 Buchstabe und 5 Ziffern im zweiten Beispiel aber 7 Ziffern entsteht Verwirrung. Meinst du also jeweils 1 buchstabe und beliebige Anzahl Ziffern oder was?
Gruß
LotPings
PS: Ansonsten sehe ich da Batchtechnish keine Probleme.
Wenn du schreibst immer gleich aufgebaut und der Aufbau ist in einem Beispiel 1 Buchstabe und 5 Ziffern im zweiten Beispiel aber 7 Ziffern entsteht Verwirrung. Meinst du also jeweils 1 buchstabe und beliebige Anzahl Ziffern oder was?
Gruß
LotPings
PS: Ansonsten sehe ich da Batchtechnish keine Probleme.
Dieser Batch prüft auf einen Buchstaben und beliebig viele Ziffern.
Wenn du eine Erläuterung brauchst um die Befehle zu versehen, melde dich nochmal
Gruß
LotPings
Wenn du eine Erläuterung brauchst um die Befehle zu versehen, melde dich nochmal
@echo off&setlocal EnableDelayedExpansion
set Base=C:\test
Pushd "%Base%"
if not Exist _Old MD _OLD
for /f "delims=" %%A in ('dir /B /A-D ^|findstr /I "^[A-Z][0-9]*.txt"'
) do set /P X=<"%%A"&(echo/!X!)>>index.txt & Move "%%A" _OLD
popd
Gruß
LotPings
Zitat von @roberth:
kann man auch eine art sciherung für dupletten einbauen oder ist das zu umständlich ?
Also sollte der String schon in in der imoprt.txt stehen dann füge ihn nicht mehr ein....??
kann man auch eine art sciherung für dupletten einbauen oder ist das zu umständlich ?
Also sollte der String schon in in der imoprt.txt stehen dann füge ihn nicht mehr ein....??
@echo off&setlocal EnableDelayedExpansion
set Base=F:\test
Pushd "%Base%"
if not Exist _Old MD _OLD
for /f "delims=" %%A in ('dir /B /A-D ^|findstr /I "^[A-Z][0-9]*.txt"'
) do set /P X=<"%%A"& Move /Y "%%A" _OLD&(find "!X!" <import.txt >NUL)||(echo/!X! >>import.txt)
popd
@echo off&setlocal EnableDelayedExpansion
set Base=F:\test
set IMP=Import.txt
set Limit=1
set /A "Counter=0"
Pushd "%Base%"
FOR /F "delims=" %%A IN ('find /V /C "" ^<%IMP%') DO set Counter=%%A
if not Exist _Old MD _OLD
for /f "delims=" %%A in ('dir /B /A-D ^|findstr /I "^[A-Z][0-9]*.txt"'
) do set /P X=<"%%A"& Move /Y "%%A" _OLD&(find "!X!" <%IMP% >NUL)||(echo/!X! >>%IMP%)&SET /A "Counter+=1"
popd
echo Es sind %Counter% Datensätze vorhanden.
if %Counter% GEQ %Limit% (
echo %IMP% hat %counter% Einträge. Bitte Datei importieren !!
REM Habe kein aktuelles Access im Zugriff, das musst du schon selber schreiben
start xyz.vbs
)
Hallo Roberth,
es ist Anfangs immer schwierig die Skills eines Anderen einzuschätzen.
Der Befehl
bezieht sich auf mein Testverzeichnis; den solltest du für deine Bedürfnisse anpassen.
Wenn du immer im gleichen Verzeichnis arbeitest geht auch
Hast du denn neue Testdaten genommen? Er prüft ja ab ob die erste Zeile schon vorhanden ist, wenn ja verschiebt er nur nach .\_old
(Dabei vorhandene Dateien gleichen Namens überschreibend.)
Die letzte war übrigens meine dritte Version - welche meinst du denn jetzt?
Gruß
LotPings
es ist Anfangs immer schwierig die Skills eines Anderen einzuschätzen.
Der Befehl
set Base=F:\test
Wenn du immer im gleichen Verzeichnis arbeitest geht auch
set Base=%CD%
Hast du denn neue Testdaten genommen? Er prüft ja ab ob die erste Zeile schon vorhanden ist, wenn ja verschiebt er nur nach .\_old
(Dabei vorhandene Dateien gleichen Namens überschreibend.)
Die letzte war übrigens meine dritte Version - welche meinst du denn jetzt?
Gruß
LotPings
Wir haben ein Kommunikationsproblem
Sorry, ich habe, weil du den Namen der Datei geändert hast, eine Variable für den Dateinamen eingeführt. (Ich habe keine Lust, die für dich angelegten Testdateien umzubenennen)
Ändere doch bitte die Zeile
um in
Gruß
LotPings
Sorry, ich habe, weil du den Namen der Datei geändert hast, eine Variable für den Dateinamen eingeführt. (Ich habe keine Lust, die für dich angelegten Testdateien umzubenennen)
Ändere doch bitte die Zeile
set IMP=Import.txt
Set IMP=WieAuchImmerDeineDateiHeisst.txt
Gruß
LotPings
Hallo roberth,
du kannst zusammengehörige Batch-Zeilen nicht einfach an beliebigen Stellen trennen.
Zeile 9 und 10 gehören zusammen, du kannst höchstens direkt nach der öffnenden Klammer ( oder direkt vor der schließenden Klammer ) einen Zeilenwechsel einfügen (So wie ich es vorgemacht habe)
Gruß
LotPings
PS: Die URL funktioniert nur deshalb weil pushd klammheimlich ein eigenes Mapping erzeugt, füge mal zwischen Zeile 6 und 7 ein:
[EDIT] Ich finde einen vernünftigen Editor zum bearbeiten der Batchdateien äußerst wichtig.
Ich benutze unter anderem den freien Editdor Notepad++. Der untertützt Syntax-Highlighting auch für .bat und .cmd Dateien.
du kannst zusammengehörige Batch-Zeilen nicht einfach an beliebigen Stellen trennen.
Zeile 9 und 10 gehören zusammen, du kannst höchstens direkt nach der öffnenden Klammer ( oder direkt vor der schließenden Klammer ) einen Zeilenwechsel einfügen (So wie ich es vorgemacht habe)
Gruß
LotPings
PS: Die URL funktioniert nur deshalb weil pushd klammheimlich ein eigenes Mapping erzeugt, füge mal zwischen Zeile 6 und 7 ein:
Echo Aktuelles Verzeichnis ist %CD%
[EDIT] Ich finde einen vernünftigen Editor zum bearbeiten der Batchdateien äußerst wichtig.
Ich benutze unter anderem den freien Editdor Notepad++. Der untertützt Syntax-Highlighting auch für .bat und .cmd Dateien.