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

Batch die Inhalte von Textdateien in eine neue Textdatei schreibt und die abgearbeitete Datei löscht

Frage Entwicklung Batch & Shell

Mitglied: roberth

roberth (Level 1) - Jetzt verbinden

21.04.2009, aktualisiert 12:32 Uhr, 4627 Aufrufe, 15 Kommentare

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
Mitglied: LotPings
21.04.2009 um 10:33 Uhr
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.
Bitte warten ..
Mitglied: roberth
21.04.2009 um 10:35 Uhr
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
Bitte warten ..
Mitglied: LotPings
21.04.2009 um 11:06 Uhr
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
01.
@echo off&setlocal EnableDelayedExpansion 
02.
set Base=C:\test 
03.
Pushd "%Base%" 
04.
if not Exist _Old MD _OLD 
05.
for /f "delims=" %%A in ('dir /B /A-D ^|findstr /I "^[A-Z][0-9]*.txt"' 
06.
) do set /P X=<"%%A"&(echo/!X!)>>index.txt & Move "%%A" _OLD 
07.
popd
Gruß
LotPings
Bitte warten ..
Mitglied: roberth
21.04.2009 um 11:27 Uhr
SUPER !!!!
Vielen Herzlichen Dank !! Funktinoiert einwandfrei !!!

Gruß,
Roberth
Bitte warten ..
Mitglied: roberth
21.04.2009 um 11:30 Uhr
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....??
Bitte warten ..
Mitglied: LotPings
21.04.2009 um 11:47 Uhr
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....??

01.
@echo off&setlocal EnableDelayedExpansion 
02.
set Base=F:\test 
03.
Pushd "%Base%" 
04.
if not Exist _Old MD _OLD 
05.
for /f "delims=" %%A in ('dir /B /A-D ^|findstr /I "^[A-Z][0-9]*.txt"' 
06.
) do set /P X=<"%%A"& Move /Y "%%A" _OLD&(find "!X!" <import.txt >NUL)||(echo/!X! >>import.txt) 
07.
popd 
08.
 
Bitte warten ..
Mitglied: roberth
21.04.2009 um 14:35 Uhr
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:

01.
set /A "Counter=0" 
02.
FOR /F "delims=" %%A IN (imp.txt) DO 
03.
SET /A "Counter+=1" 
04.
 
05.
echo Es wurden %Counter% Datensätze eingefügt. 
06.
 
07.
if %Counter% >= 1 
08.
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
Bitte warten ..
Mitglied: LotPings
21.04.2009 um 17:03 Uhr
01.
@echo off&setlocal EnableDelayedExpansion 
02.
set Base=F:\test 
03.
set IMP=Import.txt 
04.
set Limit=1 
05.
set /A "Counter=0" 
06.
Pushd "%Base%" 
07.
FOR /F "delims=" %%A IN ('find /V /C "" ^<%IMP%') DO set Counter=%%A 
08.
if not Exist _Old MD _OLD 
09.
for /f "delims=" %%A in ('dir /B /A-D ^|findstr /I "^[A-Z][0-9]*.txt"' 
10.
) do set /P X=<"%%A"& Move /Y "%%A" _OLD&(find "!X!" <%IMP% >NUL)||(echo/!X! >>%IMP%)&SET /A "Counter+=1" 
11.
popd 
12.
echo Es sind %Counter% Datensätze vorhanden. 
13.
if %Counter% GEQ %Limit% ( 
14.
  echo %IMP% hat %counter% Einträge. Bitte Datei importieren !! 
15.
  REM Habe kein aktuelles Access im Zugriff, das musst du schon selber schreiben 
16.
  start xyz.vbs 
17.
)
Bitte warten ..
Mitglied: roberth
22.04.2009 um 09:51 Uhr
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 ?
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 10:09 Uhr
Hallo Roberth,
es ist Anfangs immer schwierig die Skills eines Anderen einzuschätzen.

Der Befehl
01.
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
01.
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
Bitte warten ..
Mitglied: roberth
22.04.2009 um 11:37 Uhr
Hallo,

so, schnelles meeting gehabt und weiter gehts
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
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 13:03 Uhr
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
01.
set IMP=Import.txt
um in
01.
Set IMP=WieAuchImmerDeineDateiHeisst.txt
Gruß
LotPings
Bitte warten ..
Mitglied: roberth
22.04.2009 um 14:14 Uhr
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:

01.
echo off&setlocal EnableDelayedExpansion  
02.
set Base=\\SERVERXY\abnahme\abgenommen 
03.
set IMP=imp.txt 
04.
set Limit=1  
05.
set /A "Counter=0"  
06.
Pushd "%Base%"  
07.
FOR /F "delims=" %%A IN ('find /V /C "" ^<%IMP%') DO set Counter=%%A  
08.
if not Exist _Old MD _OLD  
09.
for /f "delims=" %%A in ('dir /B /A-D ^|findstr /I "^[A-Z][0-9]*.txt"') 
10.
do set /P X=<"%%A"& Move /Y "%%A" _OLD&(find "!X!" <%IMP% >NUL)||(echo/!X! >>%IMP%)&SET /A "Counter+=1"  
11.
popd 
12.
echo Es sind %Counter% Datensätze vorhanden.  
13.
if %Counter% GEQ %Limit% ( echo %IMP% hat %counter% Einträge. Bitte Datei importieren !! ) 
14.
rem start xyz.vbs
Greetz, Roberth
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 15:23 Uhr
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.
Bitte warten ..
Mitglied: roberth
23.04.2009 um 12:30 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mittels Batch jede Zeile einer Textdatei prüfen (4)

Frage von Peter32 zum Thema Batch & Shell ...

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

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 ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...