roberth
Goto Top

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

Content-ID: 114311

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

Ausgedruckt am: 25.11.2024 um 19:11 Uhr

77559
77559 21.04.2009 um 10:33:02 Uhr
Goto Top
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.
roberth
roberth 21.04.2009 um 10:35:38 Uhr
Goto Top
hi,

sry, aufbau ist immer ein buchstabe und 7 zahlen. der dateiname ist wie gesagt gleich wie die ersten 8 Ziffern des Strings der kopiert werden soll (vielleicht hilft das ja)

Gruß,
roberth
77559
77559 21.04.2009 um 11:06:18 Uhr
Goto Top
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
@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
roberth
roberth 21.04.2009 um 11:27:41 Uhr
Goto Top
SUPER !!!!
Vielen Herzlichen Dank !! Funktinoiert einwandfrei !!!

Gruß,
Roberth
roberth
roberth 21.04.2009 um 11:30:15 Uhr
Goto Top
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....??
77559
77559 21.04.2009 um 11:47:30 Uhr
Goto Top
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....??

@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
 
roberth
roberth 21.04.2009 um 14:35:34 Uhr
Goto Top
Super !! Vielen Dank, funkioniert einwandfrei.

Nun habe ich mir überlegt es wäre wohl interessant wenn die Batch mir noch schnell sagt wieviel Einträge gemacht wurden und ab ner bestimmten Anzahl an Einträgen sagt -> ab zum importieren, bitte. Ich hab mal so angefangen:

set /A "Counter=0"  
FOR /F "delims=" %%A IN (imp.txt) DO  
SET /A "Counter+=1"  

echo Es wurden %Counter% Datensätze eingefügt.

if %Counter% >= 1
echo Imp.txt hat %counter% Einträge. Bitte Datei importieren !!

Der Clou an der Sache wäre wenn dann auch noch die Importfunkion von Acccesss 2007 aufpoppen würde....dazu müsste man wahrscheinlcih ein "call xyz.vbs" setzen o.ä.

Gruß,
Roberth
77559
77559 21.04.2009 um 17:03:22 Uhr
Goto Top
@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
)
roberth
roberth 22.04.2009 um 09:51:47 Uhr
Goto Top
Danke ! ABER -> HEUL !!!!

mit dem letzten Script macht er gar nix mehr, der importiert nicht in die TXT er verschiebt nix nach _OLD usw.

Ich kriege bei beiden Scripten ( aber das erste funktoiniert wie gesagt) die Fehlermeldung: CMD.exe wurde mit dem oben angegebenen Pfad als aktuelles Verzeichnis gestartet. UNC Pfade werden nicht unterstützt. Stattdessen wird das Windows Verzeichnis als aktuelles Verzeichnis gesetzt.

Nur bei dem 1. Script funktionierts wie gesagt trotzdem, das zweite macht gar nix mehr

mhh...!??

Gruß,
Roberth

P.S: Wie gibt man denn jemanden virtuell nen Kaffee aus oder so ? face-wink
77559
77559 22.04.2009 um 10:09:39 Uhr
Goto Top
Hallo Roberth,
es ist Anfangs immer schwierig die Skills eines Anderen einzuschätzen.

Der Befehl
set Base=F:\test 
bezieht sich auf mein Testverzeichnis; den solltest du für deine Bedürfnisse anpassen.
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
roberth
roberth 22.04.2009 um 11:37:05 Uhr
Goto Top
Hallo,

so, schnelles meeting gehabt und weiter gehts face-smile
ich habe die Pfade natürlich angepasst, einmal als UNC Pfad und einmal als Mapping mit z:\
im letzten Script (posting 17:03) funktioniert eben nix mehr....der fasst auch die imp.txt gar nicht an (erkennabr am timestamp)
beim ersten script (posting 11:47) ist es egal ob ich mit unc oder mappings arbeite, die FM kommt zwar acuh aber er macht trotzdem alles wie er soll.

ich habe neue dateien genommen....

meine skills sind nicht die schlechtesten, aber bin einfach kein scripter, weil ich mich noch nie intensiv damit auseinandersetzen konnte....


Gruß,
Roberth
77559
77559 22.04.2009 um 13:03:59 Uhr
Goto Top
Wir haben ein Kommunikationsproblem face-sad

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
um in
Set IMP=WieAuchImmerDeineDateiHeisst.txt

Gruß
LotPings
roberth
roberth 22.04.2009 um 14:14:57 Uhr
Goto Top
ja, dass ist mir schon klar gewesen dass ich die Dateinamen / Pfade umändern muss, hab ich auch getan. Hier mal das letzte nicht funktionierende original meiner Seite:

echo off&setlocal EnableDelayedExpansion 
set Base=\\SERVERXY\abnahme\abgenommen
set IMP=imp.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 start xyz.vbs

Greetz, Roberth
77559
77559 22.04.2009 um 15:23:24 Uhr
Goto Top
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:
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.
roberth
roberth 23.04.2009 um 12:30:18 Uhr
Goto Top
so, super jetzt gehts auch, nochmal herzlichen Dank. Das hat ne Menge Zeit gespart !!!
Notepad ++ kenn ich, werds mir mal draufhaun, daran hab ich jetzt nicht gedacht...

gruß,
roberth