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

Datei auslesen und in andere Datei schreiben und mit Datum versehen

Frage Entwicklung Batch & Shell

Mitglied: HoyGroDo

HoyGroDo (Level 1) - Jetzt verbinden

01.03.2007, aktualisiert 09.06.2015, 5203 Aufrufe, 18 Kommentare

Es muss eine txt.Datei ausgelesen werden, in der mehrere Zeilen existieren.

Innerhalb der Zeilen kommt z.B. die Zeichenfolge 000008082539 vor. Identisch sind dabei immer die ersten 7 Zeichen, also 0000080.

Die komplette Zahl muss ausgelesen werden und in eine andere txt-Datei geschrieben werden.

Hinter diesem Eintrag muss dann das aktuelle Datum mit Uhrzeit erscheinen - also z.B. 000008082539 01.03.2007 14:12.

Die Zieldatei muss fortlaufend benannt werden.

Eine Kopie dieser Datei muss in ein Backup-Verzeichnis gelegt werden.


Wie kriege ich das in eine Batchdatei, die unter Windows 2000 läuft?

Gruß,

HoyGroDo
Mitglied: Randyman
01.03.2007 um 14:30 Uhr
Hi,

um die Zeichenfolge zu finden eigenet sich am besten das tool grep; stammt von Unix, gibts aber auch für Windows (googeln).

Datum und Uhrzeit dranhängen sollte kein Problem sein (date /T, time /T)

Damit sollte sich das dann verwirklichen lassen.

Gruss
Randy
Bitte warten ..
Mitglied: HoyGroDo
01.03.2007 um 15:03 Uhr
Ich bräuchte allerdings ein batch-file-script, da ich den Vorgang per Task automatisieren muss.
Bitte warten ..
Mitglied: bastla
01.03.2007 um 15:14 Uhr
Hallo HoyGroDo!

  • Der Beginn der Zeichenfolge ist am String "0000080" zu erkennen - wie findet man das Ende?
  • Kommt die Zeichenfolge in der Quelldatei einmal oder mehrmals vor?
  • Die gefundene Zeichenfolge (inkl Datum und Uhrzeit) soll in eine andere Textdatei geschrieben werden, diese muss fortlaufend benannt sein - daher für jede gefundene Zeichenfolge eine einzelne, aufsteigend nummerierte Datei?
  • Wenn ja, welches Format soll der Dateiname haben?

  • Und: Spricht etwas gegen die Verwendung des für eine derartige Aufgabenstellung besser geeigneten VBScript?

Grüße
bastla
Bitte warten ..
Mitglied: Randyman
01.03.2007 um 15:16 Uhr
schon klar; das grep musst du dann aus der batch aufrufen.

Randy
Bitte warten ..
Mitglied: HoyGroDo
01.03.2007 um 15:27 Uhr
Hallo HoyGroDo!

  • Der Beginn der Zeichenfolge ist am String
"0000080" zu erkennen - wie findet
man das Ende?
Die Zeichenfolge ist immer 12 Zeichen lang mit anschließendem Leerzeichen.

* Kommt die Zeichenfolge in der Quelldatei
einmal oder mehrmals vor?
Die Zeichenfolge 0000080 kommt mehrfach vor - die jeweilige Endung ist immer unterschiedlich.

* Die gefundene Zeichenfolge (inkl Datum und
Uhrzeit) soll in eine andere Textdatei
geschrieben werden, diese muss fortlaufend
benannt sein - daher für jede gefundene
Zeichenfolge eine einzelne, aufsteigend
nummerierte Datei?
In der Quelldatei kommen mehrere Zeichenfolgen vor, die gemeinsam in eine neue txt-Datei geschrieben werden sollen. Innerhalb der Textdatei sollen Datum und Zeit hinter die ausgelesene Zeichenfolge geschrieben werden.


* Wenn ja, welches Format soll der Dateiname
haben?

  • Und: Spricht etwas gegen die Verwendung
des für eine derartige Aufgabenstellung
besser geeigneten VBScript?
Bin nicht sicher, ob das in diesem Fall unterstützt wird ?!?


Gruß,
HoyGroDo
Bitte warten ..
Mitglied: Biber
01.03.2007 um 15:30 Uhr
...und, ergänzend zu bastla's Nachfragen:

  • steht der Suchstring jeweils am Zeilenanfang oder irgendwo in einer 2850 Zeichen langen Zeile?
  • Die Zieldatei: Steht die irgendwo oder in einem bestimmten Verzeichnis? hat die vor der Nummerierung auch irgendeinen Namen? Wie gross wird der Nummernkreis? Von 001 bis 999? Von 00000001 bis 999999999?
  • Ist es schlau, jeweils nach der "kompletten Zahl" Datum und Uhrzeit zu schreiben? Bei 777 Fundstellen 777mal? Dasselbe Datum incl. Uhrzeit pappt doch ohnehin "aussen" an der Datei dran als "Erstellungsdatum"?
  • Eine Kopie ins Backup-Verzeichnis? Hä? Das hat doch aber nichts mit diesem Suchstring-Zirkus zu tun? Ich mache doch nicht von jeder neu erzeugten Datei in Echtzeit sofort ein Backup?

Gruss
Biber
Bitte warten ..
Mitglied: HoyGroDo
01.03.2007 um 15:45 Uhr
...und, ergänzend zu bastla's
Nachfragen:

  • steht der Suchstring jeweils am
Zeilenanfang oder irgendwo in einer 2850
Zeichen langen Zeile?
steht am Anfang der Zeile - aber nur in jeder zweiten Zeile

* Die Zieldatei: Steht die irgendwo oder in
einem bestimmten Verzeichnis? hat die vor der
Nummerierung auch irgendeinen Namen? Wie
gross wird der Nummernkreis? Von 001 bis 999?
Von 00000001 bis 999999999?
Die Datei existiert vorher noch nicht. Datei soll dann in einem Unterverzeichnis des selben Pfads stehen. Der Nummernkreis ist: 000000001 bis 99999999.


* Ist es schlau, jeweils nach der
"kompletten Zahl" Datum und Uhrzeit
zu schreiben? Bei 777 Fundstellen 777mal?
Dasselbe Datum incl. Uhrzeit pappt doch
ohnehin "aussen" an der Datei dran
als "Erstellungsdatum"?
Die Zieldatei wird noch weiterverarbeitet und muss die Angabe in jeder Zeile enthalten.
Format: 28.12.06 17:32 Uhr

* Eine Kopie ins Backup-Verzeichnis?
Hä? Das hat doch aber nichts mit diesem
Suchstring-Zirkus zu tun? Ich mache doch
nicht von jeder neu erzeugten Datei in
Echtzeit sofort ein Backup?
Leider doch, da die Zieldatei übermittelt wird und nicht mehr am Zielort vorliegt.

Gruß,
HoyGroDo
Bitte warten ..
Mitglied: NKourtidis
01.03.2007 um 16:02 Uhr
Hallo,

um die datei fortlaufend zu schreiben, musst Du die Dateien erstmal zählen1 Das geht mit
for /r c:\temp\ %i in (*.*) do set /a x +=1
Hier im Beispiel im Verzeichnis "c:\temp\" und die Anzahl steht dann in der Variablen "x"
Dann nimmst Du die Datei mit den Zeilen die Du auswerten möchtest und zählst diese auf und schreibst die Zeilen gleich mit Datum und Uhrzeit in die neue Datei

for /f "eol=; tokens=1" %i in (dateiname.???) do echo %i %date% %time% >c:\temp_%x%.log

Wenn Du das in einem Batch schreibst, musst Du die %-zeichen doppelt schreiben!!

Gruß aus Köln
Bitte warten ..
Mitglied: bastla
01.03.2007 um 16:02 Uhr
Hallo HoyGroDo!

Zum Dateinamen:
  • Besteht dieser nur aus der Nummer (ab "000000001") und einer Extension (".txt")?
  • Wie komme ich zur letzten verwendeten Nummer - aus den Dateinamen im Backup-Ordner auslesen?
  • Wenn ja: Befinden sich in diesem Ordner nur die nummerierten Dateien?

  • Alternativ böte sich die Speicherung der letzten Nummer in einer Textdatei an.

Grüße
bastla
Bitte warten ..
Mitglied: NKourtidis
01.03.2007 um 16:05 Uhr
ups ich war etwas zu tief, also nochmal:

Hallo,

um die datei fortlaufend zu schreiben, musst Du die Dateien erstmal zählen1 Das geht mit

for /r c:\temp\ %i in (*.*) do set /a x +=1

Hier im Beispiel im Verzeichnis "c:\temp\" und die Anzahl steht dann in der Variablen "x"
Dann nimmst Du die Datei mit den Zeilen die Du auswerten möchtest und zählst diese auf und schreibst die Zeilen gleich mit Datum und Uhrzeit in die neue Datei

for /f "eol=; tokens=1" %i in (dateiname.???) do echo %i %date% %time% >c:\temp_%x%.log

Wenn Du das in einem Batch schreibst, musst Du die %-zeichen doppelt schreiben!!

Gruß aus Köln
Bitte warten ..
Mitglied: HoyGroDo
01.03.2007 um 16:13 Uhr
Hallo HoyGroDo!

Zum Dateinamen:
  • Besteht dieser nur aus der Nummer (ab
"000000001") und einer Extension
(".txt")?
Der Dateiname der Quelldatei sieht wie folgt aus: abcd1234.abc
Der Dateiname der Zieldatei sieht wie folgt aus: 000000001.txt

* Wie komme ich zur letzten verwendeten
Nummer - aus den Dateinamen im Backup-Ordner
auslesen?
Das wäre ein guter Ansatz

* Wenn ja: Befinden sich in diesem Ordner
nur die nummerierten Dateien?
Ja, dort befinden sich nur diese Dateien.


  • Alternativ böte sich die Speicherung
der letzten Nummer in einer Textdatei an.
Oder so


Gruß,
HoyGroDo
Bitte warten ..
Mitglied: bastla
01.03.2007 um 16:28 Uhr
Hallo HoyGroDo!

Versuch es einmal so:
01.
@echo off & setlocal 
02.
set ZielOrdner=Z:\Test 
03.
set BackupOrdner=Z:\Backup 
04.
set String=0000080 
05.
set Nr= 
06.
for /f %%i in ('dir "%BackupOrdner%" /b /o-n') do if not defined Nr set /a Nr=%%~ni 
07.
set /a Nr +=1000000001 
08.
set ZielDatei=%Nr:~-9%.txt 
09.
for /f %%i in ('findstr "%String%" "%1"') do echo %%i %date% %time:~0,5% Uhr>>"%ZielOrdner%\%ZielDatei%" 
10.
copy "%ZielOrdner%\%ZielDatei%" "%BackupOrdner%\%ZielDatei%"
Speichere die Batchdatei nach Anpassung der Pfade in den ersten beiden Zeilen zB unter "D:\Bearbeite.bat" und rufe sie mit
01.
D:\Bearbeite.bat abcd1234.abc
auf.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
LÖSUNG 01.03.2007, aktualisiert 09.06.2015
...und (wieder mal ergänzend zu bastla), je nachdem ob
  • in der Regel immer dieselbe Quelldatei x-mal nach verschiedenen Suchstrings durchflöht werden soll oder
  • x verschiedene Quelldateien nach immer wieder dem gleichen Suchstring,
sollte auch der Wert der Variablen "String" als Parameter vorgesehen werden.

01.
::Bearbeite.bat Parameter1=Quelldateiname Parameter2=Suchstring 
02.
@echo off & setlocal 
03.
set ZielOrdner=Z:\Test 
04.
set BackupOrdner=Z:\Backup 
05.
<b>Set "String=%2" 
06.
if [%2]==[] set "String=0000080"</b> 
07.
Set Nr= 
08.
for /f %%i in ('dir "%BackupOrdner%" /b /o-n') do if not defined Nr set /a Nr=%%~ni 
09.
set /a Nr +=1000000001 
10.
set ZielDatei=%Nr:~-9%.txt 
11.
for /f %%i in ('findstr "%String%" "%1"') do echo %%i %date% %time:~0,5% Uhr>>"%ZielOrdner%\%ZielDatei%" 
12.
copy "%ZielOrdner%\%ZielDatei%" "%BackupOrdner%\%ZielDatei%" 
13.
REM Tippfehlerkorrektur s.u.; ALT:<i> copy "%ZielOrdner%\%ZielDatei%" "%BackupOrdner%\%ZielDatei</i>
Mögliche Aufrufe dann:
D:\Bearbeite.bat abcd1234.abc
D:\Bearbeite.bat abcd1234.abc 0000080
for %i in (0000081 0000082 0000099) do call D:\Bearbeite.bat abcd1234.abc %i
for %i in (abcd0001 abcd1234 abcd7777) do D:\Bearbeite.bat %i 0000080
...etc

Gruss Biber
P.S. Mit meiner Frage nach: "hat die [Zieldatei] vor der Nummerierung auch irgendeinen Namen?" meinte ich das, was bastla verständlicher formuliert hat: "Besteht dieser nur aus der Nummer (ab "000000001") und einer Extension (".txt")? "
Bitte warten ..
Mitglied: HoyGroDo
02.03.2007 um 21:49 Uhr
Hallo!

Wenn ich das Skript so laufen lasse wird aber im Zielordner nur eine Datei mit Namen "000000001.txt" und im Backupordner nur eine Datei mit Namen "ZielDatei" angelegt.
Führe ich das Skript ein zweites Mal aus, dann wird das neue Ergebnis in die beiden Datei fortgeschrieben.
Ich bräuchte allerdings bei jedem Lauf des Skripts eine neue Datei mit fortlaufendem Namen im Ziel- und Backupordner.

Gruß,
HoyGroDo
Bitte warten ..
Mitglied: bastla
02.03.2007 um 21:56 Uhr
Hallo HoyGroDo!

Bei Biber's Version ist das abschließende %-Zeichen in der "copy"-Zeile verloren gegangen - wenn Du es ergänzt, sollte es mit dem Kopieren und allen weiteren Durchläufen klappen.

Grüße
bastla
Bitte warten ..
Mitglied: HoyGroDo
02.03.2007 um 22:02 Uhr
Hallo bastla!

Das hilft zumindest bei der Benennung der Datei weiter - beide heißen jetzt "000000001.txt" im ersten Durchlauf.
Aber im zweiten Lauf wird die Information wieder in die gleiche Datei dazu geschrieben.

Das Skript sieht bei mir so aus:

@echo off & setlocal
set ZielOrdner=C:\Test
set BackupOrdner=C:\Test\Backup
Set "String=%2"
if [%2]==[] set "String=0000080"
Set Nr=000000000
for /f %%i in ('dir "%BackupOrdner%" /b /o-n') do if not defined Nr set /a Nr=%%~ni
set /a Nr +=1000000001
set ZielDatei=%Nr:~-9%.txt
for /f %%i in ('findstr "%String%" "%1"') do echo %%i %date% %time:~0,5% Uhr>>"%ZielOrdner%\%ZielDatei%"
copy "%ZielOrdner%\%ZielDatei%" "%BackupOrdner%\%ZielDatei%

Der Aufruf erfolgt so: c:\Bearbeite.bat test.txt 0000080

Wie kann man nun jeweils eine neue Datei bei der Ausgabe erhalten?

HoyGroDo
Bitte warten ..
Mitglied: bastla
LÖSUNG 02.03.2007, aktualisiert 09.06.2015
Hallo HoyGroDo!

Ändere die Zeile
01.
Set Nr=000000000
auf
01.
Set Nr=
wie oben gezeigt - nur so kann die folgende Abfrage "if not defined Nr" funktionieren ...

Außerdem solltest Du in der "copy"-Zeile auch noch das schließende Anführungszeichen ans Ende setzen (hatte ich vorher nicht erwähnt, sorry) - dies für den Fall, dass Dein Backup-Pfad einmal eine Leerstelle enthalten könnte.

Grüße
bastla
Bitte warten ..
Mitglied: HoyGroDo
02.03.2007 um 22:13 Uhr
Super - klappt!

Vielen Dank für die schnelle Hilfe !!!!!

Gruß,
HoyGroDo
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst PDF Datei auslesen und per VBA in Excel schreiben (3)

Frage von Julian8990 zum Thema VB for Applications ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull zum Thema Batch & Shell ...

Batch & Shell
gelöst In Html-Datei per Batchdatei das Datum und die Uhrzeit eintragen (2)

Frage von Hakiegold zum Thema Batch & Shell ...

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

Frage von Xaero1982 zum Thema Microsoft ...

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

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...